{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch.nn as nn \n",
    "import torch.nn.functional as F\n",
    "import string"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "char2indx = {v:k for k,v in enumerate(string.ascii_lowercase) }\n",
    "index2char = {k:v for k,v in enumerate(string.ascii_lowercase) }\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "example = 'love'\n",
    "idx = torch.tensor([char2indx[i] for i in example])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "## 使用独热编码\n",
    "num_claz = len(char2indx)\n",
    "x = F.one_hot(idx,num_classes=num_claz).float()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-0.5692, -0.3974, -1.0242,  1.8610, -0.8406],\n",
       "        [-3.0763, -1.9840,  0.5752, -0.4076,  2.2964],\n",
       "        [ 2.1709, -0.2793,  1.0235, -2.0922, -0.8047],\n",
       "        [-0.5786,  1.4800,  0.8559, -0.4735, -0.5351]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 使用线性变换,提取为特征\n",
    "dims = 5\n",
    "w = torch.randn(num_claz,dims)\n",
    "(x @ w)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([[-0.5692, -0.3974, -1.0242,  1.8610, -0.8406],\n",
       "         [-3.0763, -1.9840,  0.5752, -0.4076,  2.2964],\n",
       "         [ 2.1709, -0.2793,  1.0235, -2.0922, -0.8047],\n",
       "         [-0.5786,  1.4800,  0.8559, -0.4735, -0.5351]]),\n",
       " tensor([[-0.5692, -0.3974, -1.0242,  1.8610, -0.8406],\n",
       "         [-3.0763, -1.9840,  0.5752, -0.4076,  2.2964],\n",
       "         [ 2.1709, -0.2793,  1.0235, -2.0922, -0.8047],\n",
       "         [-0.5786,  1.4800,  0.8559, -0.4735, -0.5351]]))"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 为了节省内存,可以使用另外一种方法\n",
    "w[idx],w[idx] #因此不需要生成one-hot编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Embedding:\n",
    "\n",
    "    def __init__(self, num_embeddings,embeddings_dims):\n",
    "        self.weight = torch.randn(num_embeddings,embeddings_dims,requires_grad=True)\n",
    "        pass\n",
    "    def __call__(self,idx):\n",
    "        self.out =  self.weight[idx]\n",
    "        return self.out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-0.5384, -0.4675,  0.0343, -0.3177,  1.5640],\n",
       "        [ 0.7029, -1.8914, -0.3849,  1.4410, -0.2919],\n",
       "        [ 1.7407, -0.2190, -0.1495,  1.1465,  0.7788],\n",
       "        [ 0.1368, -1.8312,  0.6090, -0.3287,  1.7396],\n",
       "        [-1.4362, -0.2705,  1.4799,  1.2018,  0.2768],\n",
       "        [ 2.3164,  0.0908, -1.3194,  2.7077,  1.7850],\n",
       "        [-0.3503, -1.9955,  0.3331,  0.1127,  1.4980],\n",
       "        [ 0.7029, -1.8914, -0.3849,  1.4410, -0.2919],\n",
       "        [-0.5384, -0.4675,  0.0343, -0.3177,  1.5640],\n",
       "        [-0.7109, -1.9254,  0.3758,  0.2119, -1.4179]],\n",
       "       grad_fn=<IndexBackward0>)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "em = Embedding(24,5)\n",
    "x = torch.randint(0,24,(10,)) #为一条文本,索引范围从0-23,长度是10\n",
    "em(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([20, 10, 5])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = torch.randint(0,24,(20,10)) #其中x的第一个维度表示有20条文本,每一个文本长度是10\n",
    "em(x).shape #shape[3]输出的5表示是特征为5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x24c65dcd450>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch.optim as optim\n",
    "from torch.utils.data import DataLoader\n",
    "from datasets import load_dataset\n",
    "import matplotlib.pyplot as plt\n",
    "torch.manual_seed(12046)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using the latest cached version of the module from C:\\Users\\35139\\.cache\\huggingface\\modules\\datasets_modules\\datasets\\code_search_net\\8f2524e6b62f65af5f5d65c53715c654db7b08dc93e0b7bcce2ab2f286a75be1 (last modified on Thu Feb 20 11:36:52 2025) since it couldn't be found locally at code_search_net, or remotely on the Hugging Face Hub.\n"
     ]
    }
   ],
   "source": [
    "raw_datasets = load_dataset('code_search_net','python')\n",
    "datasets = raw_datasets.filter(lambda x: 'apache/spark' in x['repository_name'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'z', 'F', '\"', '4', '1', '2', '+', 'L', '#', 'R', '.', 'n', '-', 'u', 'O', 'Q', 'I', '6', ',', 'o', 's', ':', '=', 'j', 'd', 't', '_', 'e', 'p', 'G', '}', 'C', 'B', 'W', 'y', '\\n', 'M', 'f', '0', '%', 'N', 'v', '7', '!', 'D', \"'\", '{', '/', '<', '[', ')', 'r', '>', 'i', 'c', 'S', ' ', '\\\\', 'P', 'T', 'b', 'x', '8', '`', 'h', '3', '(', 'U', 'q', 'k', 'w', 'V', 'E', ']', 'g', 'J', 'm', 'a', 'A', 'l', 'X'}\n"
     ]
    }
   ],
   "source": [
    "datasets = datasets['train']\n",
    "tmp = datasets['whole_func_string'][:8]\n",
    "print(set(''.join(tmp)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注意到CharTokenizer的实现目前只依赖于数据集本身"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "class CharTokenizer:\n",
    "    def __init__(self,data:list[str], begin_ind = 0,end_ind = 1):\n",
    "        # data : list[str]   \n",
    "        chars = sorted(list(set(''.join(data))))\n",
    "        self.char2ind = {s: i + 2 for i,s in enumerate(chars)}\n",
    "        self.char2ind['<|b|>'] = begin_ind\n",
    "        self.char2ind['<|e>'] = end_ind\n",
    "\n",
    "        # 转换索引\n",
    "        self.ind2char = {v : k for k,v in self.char2ind.items()}\n",
    "        self.begin_ind = begin_ind\n",
    "        self.end_ind = end_ind\n",
    "\n",
    "        pass\n",
    "\n",
    "    def encode(self,x : str):\n",
    "        return [self.char2ind[s] for s in x]\n",
    "\n",
    "    def decode(self,x : list[int]| int):\n",
    "        if isinstance(x,int):\n",
    "            return self.ind2char(x)\n",
    "        return [self.ind2char[i] for i in x]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "tokenizer = CharTokenizer(datasets['whole_func_string'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'def func(x):'"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_str = 'def func(x):'\n",
    "tokenizer.encode(test_str)\n",
    "# 查看解码器是否正确\n",
    "''.join(tokenizer.decode(tokenizer.encode(test_str)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def autoregressive_trans(text,tokenizer,windows_lens = 10):\n",
    "    # text : str\n",
    "    '''\n",
    "    这个函数用处是产生自回归数据集,输入是一条文本5以及分词器.控制窗口的长度是3\n",
    "    那么产生的data ['b','b','b',__rawData__,'e']\n",
    "    '''\n",
    "    inputs,outputs = [],[]\n",
    "    bind = tokenizer.begin_ind\n",
    "    eind = tokenizer.end_ind\n",
    "    enc = tokenizer.encode(text)\n",
    "    # 增加特殊字符\n",
    "    data = [bind] * windows_lens + enc + [eind]\n",
    "    for i in range(len(data) - windows_lens):\n",
    "        inputs.append(data[i:i+windows_lens])\n",
    "        outputs.append(data[i])\n",
    "    return inputs,outputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([[0, 0, 0],\n",
       "  [0, 0, 71],\n",
       "  [0, 71, 72],\n",
       "  [71, 72, 73],\n",
       "  [72, 73, 3],\n",
       "  [73, 3, 73],\n",
       "  [3, 73, 88],\n",
       "  [73, 88, 81],\n",
       "  [88, 81, 70],\n",
       "  [81, 70, 11],\n",
       "  [70, 11, 91],\n",
       "  [11, 91, 12],\n",
       "  [91, 12, 29]],\n",
       " [0, 0, 0, 71, 72, 73, 3, 73, 88, 81, 70, 11, 91])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs,outputs = autoregressive_trans(test_str,tokenizer,3)\n",
    "inputs,outputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "def process(data,tokenizer):\n",
    "    \"\"\" \n",
    "    为了适配DataLoader的API\n",
    "    \"\"\"\n",
    "    text = data['whole_func_string']\n",
    "    if isinstance(text,str):\n",
    "        inputs,labels = autoregressive_trans(text,tokenizer)\n",
    "        return {'inputs':inputs,'labels':labels}\n",
    "    elif isinstance(text,list):\n",
    "        inputs,labels = [],[]\n",
    "        for t in text:\n",
    "            i,l = autoregressive_trans(t,tokenizer)\n",
    "            inputs += i\n",
    "            labels += l\n",
    "        return {'inputs':inputs,'labels':labels}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'inputs': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
       "  [0, 0, 0, 0, 0, 0, 0, 0, 0, 71],\n",
       "  [0, 0, 0, 0, 0, 0, 0, 0, 71, 72],\n",
       "  [0, 0, 0, 0, 0, 0, 0, 71, 72, 73],\n",
       "  [0, 0, 0, 0, 0, 0, 71, 72, 73, 3],\n",
       "  [0, 0, 0, 0, 0, 71, 72, 73, 3, 66],\n",
       "  [0, 0, 0, 0, 71, 72, 73, 3, 66, 83],\n",
       "  [0, 0, 0, 71, 72, 73, 3, 66, 83, 68],\n",
       "  [0, 0, 71, 72, 73, 3, 66, 83, 68, 85],\n",
       "  [0, 71, 72, 73, 3, 66, 83, 68, 85, 86],\n",
       "  [71, 72, 73, 3, 66, 83, 68, 85, 86, 72],\n",
       "  [72, 73, 3, 66, 83, 68, 85, 86, 72, 66],\n",
       "  [73, 3, 66, 83, 68, 85, 86, 72, 66, 71],\n",
       "  [3, 66, 83, 68, 85, 86, 72, 66, 71, 68],\n",
       "  [66, 83, 68, 85, 86, 72, 66, 71, 68, 87],\n",
       "  [83, 68, 85, 86, 72, 66, 71, 68, 87, 68],\n",
       "  [68, 85, 86, 72, 66, 71, 68, 87, 68, 87],\n",
       "  [85, 86, 72, 66, 71, 68, 87, 68, 87, 92],\n",
       "  [86, 72, 66, 71, 68, 87, 68, 87, 92, 83],\n",
       "  [72, 66, 71, 68, 87, 68, 87, 92, 83, 72],\n",
       "  [66, 71, 68, 87, 68, 87, 92, 83, 72, 66],\n",
       "  [71, 68, 87, 68, 87, 92, 83, 72, 66, 86],\n",
       "  [68, 87, 68, 87, 92, 83, 72, 66, 86, 87],\n",
       "  [87, 68, 87, 92, 83, 72, 66, 86, 87, 85],\n",
       "  [68, 87, 92, 83, 72, 66, 86, 87, 85, 76],\n",
       "  [87, 92, 83, 72, 66, 86, 87, 85, 76, 81],\n",
       "  [92, 83, 72, 66, 86, 87, 85, 76, 81, 74],\n",
       "  [83, 72, 66, 86, 87, 85, 76, 81, 74, 11],\n",
       "  [72, 66, 86, 87, 85, 76, 81, 74, 11, 86],\n",
       "  [66, 86, 87, 85, 76, 81, 74, 11, 86, 12],\n",
       "  [86, 87, 85, 76, 81, 74, 11, 86, 12, 29],\n",
       "  [87, 85, 76, 81, 74, 11, 86, 12, 29, 2],\n",
       "  [85, 76, 81, 74, 11, 86, 12, 29, 2, 3],\n",
       "  [76, 81, 74, 11, 86, 12, 29, 2, 3, 3],\n",
       "  [81, 74, 11, 86, 12, 29, 2, 3, 3, 3],\n",
       "  [74, 11, 86, 12, 29, 2, 3, 3, 3, 3],\n",
       "  [11, 86, 12, 29, 2, 3, 3, 3, 3, 5],\n",
       "  [86, 12, 29, 2, 3, 3, 3, 3, 5, 5],\n",
       "  [12, 29, 2, 3, 3, 3, 3, 5, 5, 5],\n",
       "  [29, 2, 3, 3, 3, 3, 5, 5, 5, 2],\n",
       "  [2, 3, 3, 3, 3, 5, 5, 5, 2, 3],\n",
       "  [3, 3, 3, 3, 5, 5, 5, 2, 3, 3],\n",
       "  [3, 3, 3, 5, 5, 5, 2, 3, 3, 3],\n",
       "  [3, 3, 5, 5, 5, 2, 3, 3, 3, 3],\n",
       "  [3, 5, 5, 5, 2, 3, 3, 3, 3, 51],\n",
       "  [5, 5, 5, 2, 3, 3, 3, 3, 51, 68],\n",
       "  [5, 5, 2, 3, 3, 3, 3, 51, 68, 85],\n",
       "  [5, 2, 3, 3, 3, 3, 51, 68, 85, 86],\n",
       "  [2, 3, 3, 3, 3, 51, 68, 85, 86, 72],\n",
       "  [3, 3, 3, 3, 51, 68, 85, 86, 72, 86],\n",
       "  [3, 3, 3, 51, 68, 85, 86, 72, 86, 3],\n",
       "  [3, 3, 51, 68, 85, 86, 72, 86, 3, 87],\n",
       "  [3, 51, 68, 85, 86, 72, 86, 3, 87, 75],\n",
       "  [51, 68, 85, 86, 72, 86, 3, 87, 75, 72],\n",
       "  [68, 85, 86, 72, 86, 3, 87, 75, 72, 3],\n",
       "  [85, 86, 72, 86, 3, 87, 75, 72, 3, 74],\n",
       "  [86, 72, 86, 3, 87, 75, 72, 3, 74, 76],\n",
       "  [72, 86, 3, 87, 75, 72, 3, 74, 76, 89],\n",
       "  [86, 3, 87, 75, 72, 3, 74, 76, 89, 72],\n",
       "  [3, 87, 75, 72, 3, 74, 76, 89, 72, 81],\n",
       "  [87, 75, 72, 3, 74, 76, 89, 72, 81, 3],\n",
       "  [75, 72, 3, 74, 76, 89, 72, 81, 3, 71],\n",
       "  [72, 3, 74, 76, 89, 72, 81, 3, 71, 68],\n",
       "  [3, 74, 76, 89, 72, 81, 3, 71, 68, 87],\n",
       "  [74, 76, 89, 72, 81, 3, 71, 68, 87, 68],\n",
       "  [76, 89, 72, 81, 3, 71, 68, 87, 68, 3],\n",
       "  [89, 72, 81, 3, 71, 68, 87, 68, 3, 87],\n",
       "  [72, 81, 3, 71, 68, 87, 68, 3, 87, 92],\n",
       "  [81, 3, 71, 68, 87, 68, 3, 87, 92, 83],\n",
       "  [3, 71, 68, 87, 68, 3, 87, 92, 83, 72],\n",
       "  [71, 68, 87, 68, 3, 87, 92, 83, 72, 3],\n",
       "  [68, 87, 68, 3, 87, 92, 83, 72, 3, 86],\n",
       "  [87, 68, 3, 87, 92, 83, 72, 3, 86, 87],\n",
       "  [68, 3, 87, 92, 83, 72, 3, 86, 87, 85],\n",
       "  [3, 87, 92, 83, 72, 3, 86, 87, 85, 76],\n",
       "  [87, 92, 83, 72, 3, 86, 87, 85, 76, 81],\n",
       "  [92, 83, 72, 3, 86, 87, 85, 76, 81, 74],\n",
       "  [83, 72, 3, 86, 87, 85, 76, 81, 74, 3],\n",
       "  [72, 3, 86, 87, 85, 76, 81, 74, 3, 87],\n",
       "  [3, 86, 87, 85, 76, 81, 74, 3, 87, 82],\n",
       "  [86, 87, 85, 76, 81, 74, 3, 87, 82, 3],\n",
       "  [87, 85, 76, 81, 74, 3, 87, 82, 3, 68],\n",
       "  [85, 76, 81, 74, 3, 87, 82, 3, 68, 3],\n",
       "  [76, 81, 74, 3, 87, 82, 3, 68, 3, 29],\n",
       "  [81, 74, 3, 87, 82, 3, 68, 3, 29, 70],\n",
       "  [74, 3, 87, 82, 3, 68, 3, 29, 70, 79],\n",
       "  [3, 87, 82, 3, 68, 3, 29, 70, 79, 68],\n",
       "  [87, 82, 3, 68, 3, 29, 70, 79, 68, 86],\n",
       "  [82, 3, 68, 3, 29, 70, 79, 68, 86, 86],\n",
       "  [3, 68, 3, 29, 70, 79, 68, 86, 86, 29],\n",
       "  [68, 3, 29, 70, 79, 68, 86, 86, 29, 67],\n",
       "  [3, 29, 70, 79, 68, 86, 86, 29, 67, 39],\n",
       "  [29, 70, 79, 68, 86, 86, 29, 67, 39, 68],\n",
       "  [70, 79, 68, 86, 86, 29, 67, 39, 68, 87],\n",
       "  [79, 68, 86, 86, 29, 67, 39, 68, 87, 68],\n",
       "  [68, 86, 86, 29, 67, 39, 68, 87, 68, 55],\n",
       "  [86, 86, 29, 67, 39, 68, 87, 68, 55, 92],\n",
       "  [86, 29, 67, 39, 68, 87, 68, 55, 92, 83],\n",
       "  [29, 67, 39, 68, 87, 68, 55, 92, 83, 72],\n",
       "  [67, 39, 68, 87, 68, 55, 92, 83, 72, 67],\n",
       "  [39, 68, 87, 68, 55, 92, 83, 72, 67, 17],\n",
       "  [68, 87, 68, 55, 92, 83, 72, 67, 17, 3],\n",
       "  [87, 68, 55, 92, 83, 72, 67, 17, 3, 55],\n",
       "  [68, 55, 92, 83, 72, 67, 17, 3, 55, 75],\n",
       "  [55, 92, 83, 72, 67, 17, 3, 55, 75, 72],\n",
       "  [92, 83, 72, 67, 17, 3, 55, 75, 72, 3],\n",
       "  [83, 72, 67, 17, 3, 55, 75, 72, 3, 71],\n",
       "  [72, 67, 17, 3, 55, 75, 72, 3, 71, 68],\n",
       "  [67, 17, 3, 55, 75, 72, 3, 71, 68, 87],\n",
       "  [17, 3, 55, 75, 72, 3, 71, 68, 87, 68],\n",
       "  [3, 55, 75, 72, 3, 71, 68, 87, 68, 3],\n",
       "  [55, 75, 72, 3, 71, 68, 87, 68, 3, 87],\n",
       "  [75, 72, 3, 71, 68, 87, 68, 3, 87, 92],\n",
       "  [72, 3, 71, 68, 87, 68, 3, 87, 92, 83],\n",
       "  [3, 71, 68, 87, 68, 3, 87, 92, 83, 72],\n",
       "  [71, 68, 87, 68, 3, 87, 92, 83, 72, 3],\n",
       "  [68, 87, 68, 3, 87, 92, 83, 72, 3, 86],\n",
       "  [87, 68, 3, 87, 92, 83, 72, 3, 86, 87],\n",
       "  [68, 3, 87, 92, 83, 72, 3, 86, 87, 85],\n",
       "  [3, 87, 92, 83, 72, 3, 86, 87, 85, 76],\n",
       "  [87, 92, 83, 72, 3, 86, 87, 85, 76, 81],\n",
       "  [92, 83, 72, 3, 86, 87, 85, 76, 81, 74],\n",
       "  [83, 72, 3, 86, 87, 85, 76, 81, 74, 3],\n",
       "  [72, 3, 86, 87, 85, 76, 81, 74, 3, 73],\n",
       "  [3, 86, 87, 85, 76, 81, 74, 3, 73, 82],\n",
       "  [86, 87, 85, 76, 81, 74, 3, 73, 82, 85],\n",
       "  [87, 85, 76, 81, 74, 3, 73, 82, 85, 80],\n",
       "  [85, 76, 81, 74, 3, 73, 82, 85, 80, 68],\n",
       "  [76, 81, 74, 3, 73, 82, 85, 80, 68, 87],\n",
       "  [81, 74, 3, 73, 82, 85, 80, 68, 87, 3],\n",
       "  [74, 3, 73, 82, 85, 80, 68, 87, 3, 72],\n",
       "  [3, 73, 82, 85, 80, 68, 87, 3, 72, 84],\n",
       "  [73, 82, 85, 80, 68, 87, 3, 72, 84, 88],\n",
       "  [82, 85, 80, 68, 87, 3, 72, 84, 88, 68],\n",
       "  [85, 80, 68, 87, 3, 72, 84, 88, 68, 79],\n",
       "  [80, 68, 87, 3, 72, 84, 88, 68, 79, 86],\n",
       "  [68, 87, 3, 72, 84, 88, 68, 79, 86, 2],\n",
       "  [87, 3, 72, 84, 88, 68, 79, 86, 2, 3],\n",
       "  [3, 72, 84, 88, 68, 79, 86, 2, 3, 3],\n",
       "  [72, 84, 88, 68, 79, 86, 2, 3, 3, 3],\n",
       "  [84, 88, 68, 79, 86, 2, 3, 3, 3, 3],\n",
       "  [88, 68, 79, 86, 2, 3, 3, 3, 3, 87],\n",
       "  [68, 79, 86, 2, 3, 3, 3, 3, 87, 82],\n",
       "  [79, 86, 2, 3, 3, 3, 3, 87, 82, 3],\n",
       "  [86, 2, 3, 3, 3, 3, 87, 82, 3, 29],\n",
       "  [2, 3, 3, 3, 3, 87, 82, 3, 29, 70],\n",
       "  [3, 3, 3, 3, 87, 82, 3, 29, 70, 79],\n",
       "  [3, 3, 3, 87, 82, 3, 29, 70, 79, 68],\n",
       "  [3, 3, 87, 82, 3, 29, 70, 79, 68, 86],\n",
       "  [3, 87, 82, 3, 29, 70, 79, 68, 86, 86],\n",
       "  [87, 82, 3, 29, 70, 79, 68, 86, 86, 29],\n",
       "  [82, 3, 29, 70, 79, 68, 86, 86, 29, 67],\n",
       "  [3, 29, 70, 79, 68, 86, 86, 29, 67, 39],\n",
       "  [29, 70, 79, 68, 86, 86, 29, 67, 39, 68],\n",
       "  [70, 79, 68, 86, 86, 29, 67, 39, 68, 87],\n",
       "  [79, 68, 86, 86, 29, 67, 39, 68, 87, 68],\n",
       "  [68, 86, 86, 29, 67, 39, 68, 87, 68, 55],\n",
       "  [86, 86, 29, 67, 39, 68, 87, 68, 55, 92],\n",
       "  [86, 29, 67, 39, 68, 87, 68, 55, 92, 83],\n",
       "  [29, 67, 39, 68, 87, 68, 55, 92, 83, 72],\n",
       "  [67, 39, 68, 87, 68, 55, 92, 83, 72, 17],\n",
       "  [39, 68, 87, 68, 55, 92, 83, 72, 17, 86],\n",
       "  [68, 87, 68, 55, 92, 83, 72, 17, 86, 76],\n",
       "  [87, 68, 55, 92, 83, 72, 17, 86, 76, 80],\n",
       "  [68, 55, 92, 83, 72, 17, 86, 76, 80, 83],\n",
       "  [55, 92, 83, 72, 17, 86, 76, 80, 83, 79],\n",
       "  [92, 83, 72, 17, 86, 76, 80, 83, 79, 72],\n",
       "  [83, 72, 17, 86, 76, 80, 83, 79, 72, 54],\n",
       "  [72, 17, 86, 76, 80, 83, 79, 72, 54, 87],\n",
       "  [17, 86, 76, 80, 83, 79, 72, 54, 87, 85],\n",
       "  [86, 76, 80, 83, 79, 72, 54, 87, 85, 76],\n",
       "  [76, 80, 83, 79, 72, 54, 87, 85, 76, 81],\n",
       "  [80, 83, 79, 72, 54, 87, 85, 76, 81, 74],\n",
       "  [83, 79, 72, 54, 87, 85, 76, 81, 74, 67],\n",
       "  [79, 72, 54, 87, 85, 76, 81, 74, 67, 15],\n",
       "  [72, 54, 87, 85, 76, 81, 74, 67, 15, 3],\n",
       "  [54, 87, 85, 76, 81, 74, 67, 15, 3, 72],\n",
       "  [87, 85, 76, 81, 74, 67, 15, 3, 72, 91],\n",
       "  [85, 76, 81, 74, 67, 15, 3, 72, 91, 70],\n",
       "  [76, 81, 74, 67, 15, 3, 72, 91, 70, 72],\n",
       "  [81, 74, 67, 15, 3, 72, 91, 70, 72, 83],\n",
       "  [74, 67, 15, 3, 72, 91, 70, 72, 83, 87],\n",
       "  [67, 15, 3, 72, 91, 70, 72, 83, 87, 3],\n",
       "  [15, 3, 72, 91, 70, 72, 83, 87, 3, 87],\n",
       "  [3, 72, 91, 70, 72, 83, 87, 3, 87, 75],\n",
       "  [72, 91, 70, 72, 83, 87, 3, 87, 75, 68],\n",
       "  [91, 70, 72, 83, 87, 3, 87, 75, 68, 87],\n",
       "  [70, 72, 83, 87, 3, 87, 75, 68, 87, 3],\n",
       "  [72, 83, 87, 3, 87, 75, 68, 87, 3, 87],\n",
       "  [83, 87, 3, 87, 75, 68, 87, 3, 87, 82],\n",
       "  [87, 3, 87, 75, 68, 87, 3, 87, 82, 83],\n",
       "  [3, 87, 75, 68, 87, 3, 87, 82, 83, 3],\n",
       "  [87, 75, 68, 87, 3, 87, 82, 83, 3, 79],\n",
       "  [75, 68, 87, 3, 87, 82, 83, 3, 79, 72],\n",
       "  [68, 87, 3, 87, 82, 83, 3, 79, 72, 89],\n",
       "  [87, 3, 87, 82, 83, 3, 79, 72, 89, 72],\n",
       "  [3, 87, 82, 83, 3, 79, 72, 89, 72, 79],\n",
       "  [87, 82, 83, 3, 79, 72, 89, 72, 79, 3],\n",
       "  [82, 83, 3, 79, 72, 89, 72, 79, 3, 86],\n",
       "  [83, 3, 79, 72, 89, 72, 79, 3, 86, 87],\n",
       "  [3, 79, 72, 89, 72, 79, 3, 86, 87, 85],\n",
       "  [79, 72, 89, 72, 79, 3, 86, 87, 85, 88],\n",
       "  [72, 89, 72, 79, 3, 86, 87, 85, 88, 70],\n",
       "  [89, 72, 79, 3, 86, 87, 85, 88, 70, 87],\n",
       "  [72, 79, 3, 86, 87, 85, 88, 70, 87, 3],\n",
       "  [79, 3, 86, 87, 85, 88, 70, 87, 3, 87],\n",
       "  [3, 86, 87, 85, 88, 70, 87, 3, 87, 92],\n",
       "  [86, 87, 85, 88, 70, 87, 3, 87, 92, 83],\n",
       "  [87, 85, 88, 70, 87, 3, 87, 92, 83, 72],\n",
       "  [85, 88, 70, 87, 3, 87, 92, 83, 72, 3],\n",
       "  [88, 70, 87, 3, 87, 92, 83, 72, 3, 70],\n",
       "  [70, 87, 3, 87, 92, 83, 72, 3, 70, 68],\n",
       "  [87, 3, 87, 92, 83, 72, 3, 70, 68, 81],\n",
       "  [3, 87, 92, 83, 72, 3, 70, 68, 81, 3],\n",
       "  [87, 92, 83, 72, 3, 70, 68, 81, 3, 82],\n",
       "  [92, 83, 72, 3, 70, 68, 81, 3, 82, 80],\n",
       "  [83, 72, 3, 70, 68, 81, 3, 82, 80, 76],\n",
       "  [72, 3, 70, 68, 81, 3, 82, 80, 76, 87],\n",
       "  [3, 70, 68, 81, 3, 82, 80, 76, 87, 2],\n",
       "  [70, 68, 81, 3, 82, 80, 76, 87, 2, 3],\n",
       "  [68, 81, 3, 82, 80, 76, 87, 2, 3, 3],\n",
       "  [81, 3, 82, 80, 76, 87, 2, 3, 3, 3],\n",
       "  [3, 82, 80, 76, 87, 2, 3, 3, 3, 3],\n",
       "  [82, 80, 76, 87, 2, 3, 3, 3, 3, 87],\n",
       "  [80, 76, 87, 2, 3, 3, 3, 3, 87, 75],\n",
       "  [76, 87, 2, 3, 3, 3, 3, 87, 75, 72],\n",
       "  [87, 2, 3, 3, 3, 3, 87, 75, 72, 3],\n",
       "  [2, 3, 3, 3, 3, 87, 75, 72, 3, 67],\n",
       "  [3, 3, 3, 3, 87, 75, 72, 3, 67, 67],\n",
       "  [3, 3, 3, 87, 75, 72, 3, 67, 67, 86],\n",
       "  [3, 3, 87, 75, 72, 3, 67, 67, 86, 87],\n",
       "  [3, 87, 75, 72, 3, 67, 67, 86, 87, 85],\n",
       "  [87, 75, 72, 3, 67, 67, 86, 87, 85, 88],\n",
       "  [75, 72, 3, 67, 67, 86, 87, 85, 88, 70],\n",
       "  [72, 3, 67, 67, 86, 87, 85, 88, 70, 87],\n",
       "  [3, 67, 67, 86, 87, 85, 88, 70, 87, 31],\n",
       "  [67, 67, 86, 87, 85, 88, 70, 87, 31, 33],\n",
       "  [67, 86, 87, 85, 88, 70, 87, 31, 33, 67],\n",
       "  [86, 87, 85, 88, 70, 87, 31, 33, 67, 67],\n",
       "  [87, 85, 88, 70, 87, 31, 33, 67, 67, 3],\n",
       "  [85, 88, 70, 87, 31, 33, 67, 67, 3, 68],\n",
       "  [88, 70, 87, 31, 33, 67, 67, 3, 68, 81],\n",
       "  [70, 87, 31, 33, 67, 67, 3, 68, 81, 71],\n",
       "  [87, 31, 33, 67, 67, 3, 68, 81, 71, 3],\n",
       "  [31, 33, 67, 67, 3, 68, 81, 71, 3, 68],\n",
       "  [33, 67, 67, 3, 68, 81, 71, 3, 68, 87],\n",
       "  [67, 67, 3, 68, 81, 71, 3, 68, 87, 82],\n",
       "  [67, 3, 68, 81, 71, 3, 68, 87, 82, 80],\n",
       "  [3, 68, 81, 71, 3, 68, 87, 82, 80, 76],\n",
       "  [68, 81, 71, 3, 68, 87, 82, 80, 76, 70],\n",
       "  [81, 71, 3, 68, 87, 82, 80, 76, 70, 3],\n",
       "  [71, 3, 68, 87, 82, 80, 76, 70, 3, 87],\n",
       "  [3, 68, 87, 82, 80, 76, 70, 3, 87, 92],\n",
       "  [68, 87, 82, 80, 76, 70, 3, 87, 92, 83],\n",
       "  [87, 82, 80, 76, 70, 3, 87, 92, 83, 72],\n",
       "  [82, 80, 76, 70, 3, 87, 92, 83, 72, 86],\n",
       "  [80, 76, 70, 3, 87, 92, 83, 72, 86, 3],\n",
       "  [76, 70, 3, 87, 92, 83, 72, 86, 3, 88],\n",
       "  [70, 3, 87, 92, 83, 72, 86, 3, 88, 86],\n",
       "  [3, 87, 92, 83, 72, 86, 3, 88, 86, 72],\n",
       "  [87, 92, 83, 72, 86, 3, 88, 86, 72, 3],\n",
       "  [92, 83, 72, 86, 3, 88, 86, 72, 3, 67],\n",
       "  [83, 72, 86, 3, 88, 86, 72, 3, 67, 67],\n",
       "  [72, 86, 3, 88, 86, 72, 3, 67, 67, 87],\n",
       "  [86, 3, 88, 86, 72, 3, 67, 67, 87, 92],\n",
       "  [3, 88, 86, 72, 3, 67, 67, 87, 92, 83],\n",
       "  [88, 86, 72, 3, 67, 67, 87, 92, 83, 72],\n",
       "  [86, 72, 3, 67, 67, 87, 92, 83, 72, 49],\n",
       "  [72, 3, 67, 67, 87, 92, 83, 72, 49, 68],\n",
       "  [3, 67, 67, 87, 92, 83, 72, 49, 68, 80],\n",
       "  [67, 67, 87, 92, 83, 72, 49, 68, 80, 72],\n",
       "  [67, 87, 92, 83, 72, 49, 68, 80, 72, 11],\n",
       "  [87, 92, 83, 72, 49, 68, 80, 72, 11, 12],\n",
       "  [92, 83, 72, 49, 68, 80, 72, 11, 12, 67],\n",
       "  [83, 72, 49, 68, 80, 72, 11, 12, 67, 67],\n",
       "  [72, 49, 68, 80, 72, 11, 12, 67, 67, 3],\n",
       "  [49, 68, 80, 72, 11, 12, 67, 67, 3, 68],\n",
       "  [68, 80, 72, 11, 12, 67, 67, 3, 68, 86],\n",
       "  [80, 72, 11, 12, 67, 67, 3, 68, 86, 3],\n",
       "  [72, 11, 12, 67, 67, 3, 68, 86, 3, 87],\n",
       "  [11, 12, 67, 67, 3, 68, 86, 3, 87, 75],\n",
       "  [12, 67, 67, 3, 68, 86, 3, 87, 75, 72],\n",
       "  [67, 67, 3, 68, 86, 3, 87, 75, 72, 76],\n",
       "  [67, 3, 68, 86, 3, 87, 75, 72, 76, 85],\n",
       "  [3, 68, 86, 3, 87, 75, 72, 76, 85, 3],\n",
       "  [68, 86, 3, 87, 75, 72, 76, 85, 3, 73],\n",
       "  [86, 3, 87, 75, 72, 76, 85, 3, 73, 82],\n",
       "  [3, 87, 75, 72, 76, 85, 3, 73, 82, 85],\n",
       "  [87, 75, 72, 76, 85, 3, 73, 82, 85, 80],\n",
       "  [75, 72, 76, 85, 3, 73, 82, 85, 80, 68],\n",
       "  [72, 76, 85, 3, 73, 82, 85, 80, 68, 87],\n",
       "  [76, 85, 3, 73, 82, 85, 80, 68, 87, 15],\n",
       "  [85, 3, 73, 82, 85, 80, 68, 87, 15, 3],\n",
       "  [3, 73, 82, 85, 80, 68, 87, 15, 3, 72],\n",
       "  [73, 82, 85, 80, 68, 87, 15, 3, 72, 17],\n",
       "  [82, 85, 80, 68, 87, 15, 3, 72, 17, 74],\n",
       "  [85, 80, 68, 87, 15, 3, 72, 17, 74, 17],\n",
       "  [80, 68, 87, 15, 3, 72, 17, 74, 17, 3],\n",
       "  [68, 87, 15, 3, 72, 17, 74, 17, 3, 88],\n",
       "  [87, 15, 3, 72, 17, 74, 17, 3, 88, 86],\n",
       "  [15, 3, 72, 17, 74, 17, 3, 88, 86, 72],\n",
       "  [3, 72, 17, 74, 17, 3, 88, 86, 72, 3],\n",
       "  [72, 17, 74, 17, 3, 88, 86, 72, 3, 67],\n",
       "  [17, 74, 17, 3, 88, 86, 72, 3, 67, 67],\n",
       "  [74, 17, 3, 88, 86, 72, 3, 67, 67, 69],\n",
       "  [17, 3, 88, 86, 72, 3, 67, 67, 69, 92],\n",
       "  [3, 88, 86, 72, 3, 67, 67, 69, 92, 87],\n",
       "  [88, 86, 72, 3, 67, 67, 69, 92, 87, 72],\n",
       "  [86, 72, 3, 67, 67, 69, 92, 87, 72, 67],\n",
       "  [72, 3, 67, 67, 69, 92, 87, 72, 67, 67],\n",
       "  [3, 67, 67, 69, 92, 87, 72, 67, 67, 3],\n",
       "  [67, 67, 69, 92, 87, 72, 67, 67, 3, 76],\n",
       "  [67, 69, 92, 87, 72, 67, 67, 3, 76, 81],\n",
       "  [69, 92, 87, 72, 67, 67, 3, 76, 81, 86],\n",
       "  [92, 87, 72, 67, 67, 3, 76, 81, 86, 87],\n",
       "  [87, 72, 67, 67, 3, 76, 81, 86, 87, 72],\n",
       "  [72, 67, 67, 3, 76, 81, 86, 87, 72, 68],\n",
       "  [67, 67, 3, 76, 81, 86, 87, 72, 68, 71],\n",
       "  [67, 3, 76, 81, 86, 87, 72, 68, 71, 2],\n",
       "  [3, 76, 81, 86, 87, 72, 68, 71, 2, 3],\n",
       "  [76, 81, 86, 87, 72, 68, 71, 2, 3, 3],\n",
       "  [81, 86, 87, 72, 68, 71, 2, 3, 3, 3],\n",
       "  [86, 87, 72, 68, 71, 2, 3, 3, 3, 3],\n",
       "  [87, 72, 68, 71, 2, 3, 3, 3, 3, 82],\n",
       "  [72, 68, 71, 2, 3, 3, 3, 3, 82, 73],\n",
       "  [68, 71, 2, 3, 3, 3, 3, 82, 73, 3],\n",
       "  [71, 2, 3, 3, 3, 3, 82, 73, 3, 67],\n",
       "  [2, 3, 3, 3, 3, 82, 73, 3, 67, 67],\n",
       "  [3, 3, 3, 3, 82, 73, 3, 67, 67, 87],\n",
       "  [3, 3, 3, 82, 73, 3, 67, 67, 87, 76],\n",
       "  [3, 3, 82, 73, 3, 67, 67, 87, 76, 81],\n",
       "  [3, 82, 73, 3, 67, 67, 87, 76, 81, 92],\n",
       "  [82, 73, 3, 67, 67, 87, 76, 81, 92, 76],\n",
       "  [73, 3, 67, 67, 87, 76, 81, 92, 76, 81],\n",
       "  [3, 67, 67, 87, 76, 81, 92, 76, 81, 87],\n",
       "  [67, 67, 87, 76, 81, 92, 76, 81, 87, 67],\n",
       "  [67, 87, 76, 81, 92, 76, 81, 87, 67, 67],\n",
       "  [87, 76, 81, 92, 76, 81, 87, 67, 67, 3],\n",
       "  [76, 81, 92, 76, 81, 87, 67, 67, 3, 73],\n",
       "  [81, 92, 76, 81, 87, 67, 67, 3, 73, 82],\n",
       "  [92, 76, 81, 87, 67, 67, 3, 73, 82, 85],\n",
       "  [76, 81, 87, 67, 67, 3, 73, 82, 85, 3],\n",
       "  [81, 87, 67, 67, 3, 73, 82, 85, 3, 29],\n",
       "  [87, 67, 67, 3, 73, 82, 85, 3, 29, 70],\n",
       "  [67, 67, 3, 73, 82, 85, 3, 29, 70, 79],\n",
       "  [67, 3, 73, 82, 85, 3, 29, 70, 79, 68],\n",
       "  [3, 73, 82, 85, 3, 29, 70, 79, 68, 86],\n",
       "  [73, 82, 85, 3, 29, 70, 79, 68, 86, 86],\n",
       "  [82, 85, 3, 29, 70, 79, 68, 86, 86, 29],\n",
       "  [85, 3, 29, 70, 79, 68, 86, 86, 29, 67],\n",
       "  [3, 29, 70, 79, 68, 86, 86, 29, 67, 37],\n",
       "  [29, 70, 79, 68, 86, 86, 29, 67, 37, 92],\n",
       "  [70, 79, 68, 86, 86, 29, 67, 37, 92, 87],\n",
       "  [79, 68, 86, 86, 29, 67, 37, 92, 87, 72],\n",
       "  [68, 86, 86, 29, 67, 37, 92, 87, 72, 55],\n",
       "  [86, 86, 29, 67, 37, 92, 87, 72, 55, 92],\n",
       "  [86, 29, 67, 37, 92, 87, 72, 55, 92, 83],\n",
       "  [29, 67, 37, 92, 87, 72, 55, 92, 83, 72],\n",
       "  [67, 37, 92, 87, 72, 55, 92, 83, 72, 67],\n",
       "  [37, 92, 87, 72, 55, 92, 83, 72, 67, 17],\n",
       "  [92, 87, 72, 55, 92, 83, 72, 67, 17, 3],\n",
       "  [87, 72, 55, 92, 83, 72, 67, 17, 3, 58],\n",
       "  [72, 55, 92, 83, 72, 67, 17, 3, 58, 72],\n",
       "  [55, 92, 83, 72, 67, 17, 3, 58, 72, 3],\n",
       "  [92, 83, 72, 67, 17, 3, 58, 72, 3, 70],\n",
       "  [83, 72, 67, 17, 3, 58, 72, 3, 70, 68],\n",
       "  [72, 67, 17, 3, 58, 72, 3, 70, 68, 81],\n",
       "  [67, 17, 3, 58, 72, 3, 70, 68, 81, 3],\n",
       "  [17, 3, 58, 72, 3, 70, 68, 81, 3, 68],\n",
       "  [3, 58, 72, 3, 70, 68, 81, 3, 68, 79],\n",
       "  [58, 72, 3, 70, 68, 81, 3, 68, 79, 86],\n",
       "  [72, 3, 70, 68, 81, 3, 68, 79, 86, 82],\n",
       "  [3, 70, 68, 81, 3, 68, 79, 86, 82, 3],\n",
       "  [70, 68, 81, 3, 68, 79, 86, 82, 3, 88],\n",
       "  [68, 81, 3, 68, 79, 86, 82, 3, 88, 86],\n",
       "  [81, 3, 68, 79, 86, 82, 3, 88, 86, 72],\n",
       "  [3, 68, 79, 86, 82, 3, 88, 86, 72, 3],\n",
       "  [68, 79, 86, 82, 3, 88, 86, 72, 3, 67],\n",
       "  [79, 86, 82, 3, 88, 86, 72, 3, 67, 67],\n",
       "  [86, 82, 3, 88, 86, 72, 3, 67, 67, 76],\n",
       "  [82, 3, 88, 86, 72, 3, 67, 67, 76, 81],\n",
       "  [3, 88, 86, 72, 3, 67, 67, 76, 81, 87],\n",
       "  [88, 86, 72, 3, 67, 67, 76, 81, 87, 67],\n",
       "  [86, 72, 3, 67, 67, 76, 81, 87, 67, 67],\n",
       "  [72, 3, 67, 67, 76, 81, 87, 67, 67, 3],\n",
       "  [3, 67, 67, 76, 81, 87, 67, 67, 3, 68],\n",
       "  [67, 67, 76, 81, 87, 67, 67, 3, 68, 86],\n",
       "  [67, 76, 81, 87, 67, 67, 3, 68, 86, 3],\n",
       "  [76, 81, 87, 67, 67, 3, 68, 86, 3, 68],\n",
       "  [81, 87, 67, 67, 3, 68, 86, 3, 68, 3],\n",
       "  [87, 67, 67, 3, 68, 86, 3, 68, 3, 86],\n",
       "  [67, 67, 3, 68, 86, 3, 68, 3, 86, 75],\n",
       "  [67, 3, 68, 86, 3, 68, 3, 86, 75, 82],\n",
       "  [3, 68, 86, 3, 68, 3, 86, 75, 82, 85],\n",
       "  [68, 86, 3, 68, 3, 86, 75, 82, 85, 87],\n",
       "  [86, 3, 68, 3, 86, 75, 82, 85, 87, 3],\n",
       "  [3, 68, 3, 86, 75, 82, 85, 87, 3, 81],\n",
       "  [68, 3, 86, 75, 82, 85, 87, 3, 81, 68],\n",
       "  [3, 86, 75, 82, 85, 87, 3, 81, 68, 80],\n",
       "  [86, 75, 82, 85, 87, 3, 81, 68, 80, 72],\n",
       "  [75, 82, 85, 87, 3, 81, 68, 80, 72, 2],\n",
       "  [82, 85, 87, 3, 81, 68, 80, 72, 2, 3],\n",
       "  [85, 87, 3, 81, 68, 80, 72, 2, 3, 3],\n",
       "  [87, 3, 81, 68, 80, 72, 2, 3, 3, 3],\n",
       "  [3, 81, 68, 80, 72, 2, 3, 3, 3, 3],\n",
       "  [81, 68, 80, 72, 2, 3, 3, 3, 3, 73],\n",
       "  [68, 80, 72, 2, 3, 3, 3, 3, 73, 82],\n",
       "  [80, 72, 2, 3, 3, 3, 3, 73, 82, 85],\n",
       "  [72, 2, 3, 3, 3, 3, 73, 82, 85, 3],\n",
       "  [2, 3, 3, 3, 3, 73, 82, 85, 3, 29],\n",
       "  [3, 3, 3, 3, 73, 82, 85, 3, 29, 70],\n",
       "  [3, 3, 3, 73, 82, 85, 3, 29, 70, 79],\n",
       "  [3, 3, 73, 82, 85, 3, 29, 70, 79, 68],\n",
       "  [3, 73, 82, 85, 3, 29, 70, 79, 68, 86],\n",
       "  [73, 82, 85, 3, 29, 70, 79, 68, 86, 86],\n",
       "  [82, 85, 3, 29, 70, 79, 68, 86, 86, 29],\n",
       "  [85, 3, 29, 70, 79, 68, 86, 86, 29, 67],\n",
       "  [3, 29, 70, 79, 68, 86, 86, 29, 67, 44],\n",
       "  [29, 70, 79, 68, 86, 86, 29, 67, 44, 81],\n",
       "  [70, 79, 68, 86, 86, 29, 67, 44, 81, 87],\n",
       "  [79, 68, 86, 86, 29, 67, 44, 81, 87, 72],\n",
       "  [68, 86, 86, 29, 67, 44, 81, 87, 72, 74],\n",
       "  [86, 86, 29, 67, 44, 81, 87, 72, 74, 72],\n",
       "  [86, 29, 67, 44, 81, 87, 72, 74, 72, 85],\n",
       "  [29, 67, 44, 81, 87, 72, 74, 72, 85, 55],\n",
       "  [67, 44, 81, 87, 72, 74, 72, 85, 55, 92],\n",
       "  [44, 81, 87, 72, 74, 72, 85, 55, 92, 83],\n",
       "  [81, 87, 72, 74, 72, 85, 55, 92, 83, 72],\n",
       "  [87, 72, 74, 72, 85, 55, 92, 83, 72, 67],\n",
       "  [72, 74, 72, 85, 55, 92, 83, 72, 67, 17],\n",
       "  [74, 72, 85, 55, 92, 83, 72, 67, 17, 3],\n",
       "  [72, 85, 55, 92, 83, 72, 67, 17, 3, 54],\n",
       "  [85, 55, 92, 83, 72, 67, 17, 3, 54, 76],\n",
       "  [55, 92, 83, 72, 67, 17, 3, 54, 76, 81],\n",
       "  [92, 83, 72, 67, 17, 3, 54, 76, 81, 70],\n",
       "  [83, 72, 67, 17, 3, 54, 76, 81, 70, 72],\n",
       "  [72, 67, 17, 3, 54, 76, 81, 70, 72, 3],\n",
       "  [67, 17, 3, 54, 76, 81, 70, 72, 3, 54],\n",
       "  [17, 3, 54, 76, 81, 70, 72, 3, 54, 83],\n",
       "  [3, 54, 76, 81, 70, 72, 3, 54, 83, 68],\n",
       "  [54, 76, 81, 70, 72, 3, 54, 83, 68, 85],\n",
       "  [76, 81, 70, 72, 3, 54, 83, 68, 85, 78],\n",
       "  [81, 70, 72, 3, 54, 83, 68, 85, 78, 3],\n",
       "  [70, 72, 3, 54, 83, 68, 85, 78, 3, 21],\n",
       "  [72, 3, 54, 83, 68, 85, 78, 3, 21, 17],\n",
       "  [3, 54, 83, 68, 85, 78, 3, 21, 17, 22],\n",
       "  [54, 83, 68, 85, 78, 3, 21, 17, 22, 15],\n",
       "  [83, 68, 85, 78, 3, 21, 17, 22, 15, 3],\n",
       "  [68, 85, 78, 3, 21, 17, 22, 15, 3, 87],\n",
       "  [85, 78, 3, 21, 17, 22, 15, 3, 87, 75],\n",
       "  [78, 3, 21, 17, 22, 15, 3, 87, 75, 76],\n",
       "  [3, 21, 17, 22, 15, 3, 87, 75, 76, 86],\n",
       "  [21, 17, 22, 15, 3, 87, 75, 76, 86, 3],\n",
       "  [17, 22, 15, 3, 87, 75, 76, 86, 3, 68],\n",
       "  [22, 15, 3, 87, 75, 76, 86, 3, 68, 79],\n",
       "  [15, 3, 87, 75, 76, 86, 3, 68, 79, 86],\n",
       "  [3, 87, 75, 76, 86, 3, 68, 79, 86, 82],\n",
       "  [87, 75, 76, 86, 3, 68, 79, 86, 82, 3],\n",
       "  [75, 76, 86, 3, 68, 79, 86, 82, 3, 86],\n",
       "  [76, 86, 3, 68, 79, 86, 82, 3, 86, 88],\n",
       "  [86, 3, 68, 79, 86, 82, 3, 86, 88, 83],\n",
       "  [3, 68, 79, 86, 82, 3, 86, 88, 83, 83],\n",
       "  [68, 79, 86, 82, 3, 86, 88, 83, 83, 82],\n",
       "  [79, 86, 82, 3, 86, 88, 83, 83, 82, 85],\n",
       "  [86, 82, 3, 86, 88, 83, 83, 82, 85, 87],\n",
       "  [82, 3, 86, 88, 83, 83, 82, 85, 87, 86],\n",
       "  [3, 86, 88, 83, 83, 82, 85, 87, 86, 3],\n",
       "  [86, 88, 83, 83, 82, 85, 87, 86, 3, 68],\n",
       "  [88, 83, 83, 82, 85, 87, 86, 3, 68, 3],\n",
       "  [83, 83, 82, 85, 87, 86, 3, 68, 3, 86],\n",
       "  [83, 82, 85, 87, 86, 3, 68, 3, 86, 70],\n",
       "  [82, 85, 87, 86, 3, 68, 3, 86, 70, 75],\n",
       "  [85, 87, 86, 3, 68, 3, 86, 70, 75, 72],\n",
       "  [87, 86, 3, 68, 3, 86, 70, 75, 72, 80],\n",
       "  [86, 3, 68, 3, 86, 70, 75, 72, 80, 68],\n",
       "  [3, 68, 3, 86, 70, 75, 72, 80, 68, 3],\n",
       "  [68, 3, 86, 70, 75, 72, 80, 68, 3, 76],\n",
       "  [3, 86, 70, 75, 72, 80, 68, 3, 76, 81],\n",
       "  [86, 70, 75, 72, 80, 68, 3, 76, 81, 3],\n",
       "  [70, 75, 72, 80, 68, 3, 76, 81, 3, 68],\n",
       "  [75, 72, 80, 68, 3, 76, 81, 3, 68, 3],\n",
       "  [72, 80, 68, 3, 76, 81, 3, 68, 3, 39],\n",
       "  [80, 68, 3, 76, 81, 3, 68, 3, 39, 39],\n",
       "  [68, 3, 76, 81, 3, 68, 3, 39, 39, 47],\n",
       "  [3, 76, 81, 3, 68, 3, 39, 39, 47, 16],\n",
       "  [76, 81, 3, 68, 3, 39, 39, 47, 16, 73],\n",
       "  [81, 3, 68, 3, 39, 39, 47, 16, 73, 82],\n",
       "  [3, 68, 3, 39, 39, 47, 16, 73, 82, 85],\n",
       "  [68, 3, 39, 39, 47, 16, 73, 82, 85, 80],\n",
       "  [3, 39, 39, 47, 16, 73, 82, 85, 80, 68],\n",
       "  [39, 39, 47, 16, 73, 82, 85, 80, 68, 87],\n",
       "  [39, 47, 16, 73, 82, 85, 80, 68, 87, 87],\n",
       "  [47, 16, 73, 82, 85, 80, 68, 87, 87, 72],\n",
       "  [16, 73, 82, 85, 80, 68, 87, 87, 72, 71],\n",
       "  [73, 82, 85, 80, 68, 87, 87, 72, 71, 2],\n",
       "  [82, 85, 80, 68, 87, 87, 72, 71, 2, 3],\n",
       "  [85, 80, 68, 87, 87, 72, 71, 2, 3, 3],\n",
       "  [80, 68, 87, 87, 72, 71, 2, 3, 3, 3],\n",
       "  [68, 87, 87, 72, 71, 2, 3, 3, 3, 3],\n",
       "  [87, 87, 72, 71, 2, 3, 3, 3, 3, 86],\n",
       "  [87, 72, 71, 2, 3, 3, 3, 3, 86, 87],\n",
       "  [72, 71, 2, 3, 3, 3, 3, 86, 87, 85],\n",
       "  [71, 2, 3, 3, 3, 3, 86, 87, 85, 76],\n",
       "  [2, 3, 3, 3, 3, 86, 87, 85, 76, 81],\n",
       "  [3, 3, 3, 3, 86, 87, 85, 76, 81, 74],\n",
       "  [3, 3, 3, 86, 87, 85, 76, 81, 74, 3],\n",
       "  [3, 3, 86, 87, 85, 76, 81, 74, 3, 68],\n",
       "  [3, 86, 87, 85, 76, 81, 74, 3, 68, 81],\n",
       "  [86, 87, 85, 76, 81, 74, 3, 68, 81, 71],\n",
       "  [87, 85, 76, 81, 74, 3, 68, 81, 71, 3],\n",
       "  [85, 76, 81, 74, 3, 68, 81, 71, 3, 70],\n",
       "  [76, 81, 74, 3, 68, 81, 71, 3, 70, 68],\n",
       "  [81, 74, 3, 68, 81, 71, 3, 70, 68, 86],\n",
       "  [74, 3, 68, 81, 71, 3, 70, 68, 86, 72],\n",
       "  [3, 68, 81, 71, 3, 70, 68, 86, 72, 16],\n",
       "  [68, 81, 71, 3, 70, 68, 86, 72, 16, 76],\n",
       "  [81, 71, 3, 70, 68, 86, 72, 16, 76, 81],\n",
       "  [71, 3, 70, 68, 86, 72, 16, 76, 81, 86],\n",
       "  [3, 70, 68, 86, 72, 16, 76, 81, 86, 72],\n",
       "  [70, 68, 86, 72, 16, 76, 81, 86, 72, 81],\n",
       "  [68, 86, 72, 16, 76, 81, 86, 72, 81, 86],\n",
       "  [86, 72, 16, 76, 81, 86, 72, 81, 86, 76],\n",
       "  [72, 16, 76, 81, 86, 72, 81, 86, 76, 87],\n",
       "  [16, 76, 81, 86, 72, 81, 86, 76, 87, 76],\n",
       "  [76, 81, 86, 72, 81, 86, 76, 87, 76, 89],\n",
       "  [81, 86, 72, 81, 86, 76, 87, 76, 89, 72],\n",
       "  [86, 72, 81, 86, 76, 87, 76, 89, 72, 3],\n",
       "  [72, 81, 86, 76, 87, 76, 89, 72, 3, 86],\n",
       "  [81, 86, 76, 87, 76, 89, 72, 3, 86, 87],\n",
       "  [86, 76, 87, 76, 89, 72, 3, 86, 87, 85],\n",
       "  [76, 87, 76, 89, 72, 3, 86, 87, 85, 76],\n",
       "  [87, 76, 89, 72, 3, 86, 87, 85, 76, 81],\n",
       "  [76, 89, 72, 3, 86, 87, 85, 76, 81, 74],\n",
       "  [89, 72, 3, 86, 87, 85, 76, 81, 74, 86],\n",
       "  [72, 3, 86, 87, 85, 76, 81, 74, 86, 17],\n",
       "  [3, 86, 87, 85, 76, 81, 74, 86, 17, 2],\n",
       "  [86, 87, 85, 76, 81, 74, 86, 17, 2, 2],\n",
       "  [87, 85, 76, 81, 74, 86, 17, 2, 2, 3],\n",
       "  [85, 76, 81, 74, 86, 17, 2, 2, 3, 3],\n",
       "  [76, 81, 74, 86, 17, 2, 2, 3, 3, 3],\n",
       "  [81, 74, 86, 17, 2, 2, 3, 3, 3, 3],\n",
       "  [74, 86, 17, 2, 2, 3, 3, 3, 3, 33],\n",
       "  [86, 17, 2, 2, 3, 3, 3, 3, 33, 33],\n",
       "  [17, 2, 2, 3, 3, 3, 3, 33, 33, 33],\n",
       "  [2, 2, 3, 3, 3, 3, 33, 33, 33, 3],\n",
       "  [2, 3, 3, 3, 3, 33, 33, 33, 3, 66],\n",
       "  [3, 3, 3, 3, 33, 33, 33, 3, 66, 83],\n",
       "  [3, 3, 3, 33, 33, 33, 3, 66, 83, 68],\n",
       "  [3, 3, 33, 33, 33, 3, 66, 83, 68, 85],\n",
       "  [3, 33, 33, 33, 3, 66, 83, 68, 85, 86],\n",
       "  [33, 33, 33, 3, 66, 83, 68, 85, 86, 72],\n",
       "  [33, 33, 3, 66, 83, 68, 85, 86, 72, 66],\n",
       "  [33, 3, 66, 83, 68, 85, 86, 72, 66, 71],\n",
       "  [3, 66, 83, 68, 85, 86, 72, 66, 71, 68],\n",
       "  [66, 83, 68, 85, 86, 72, 66, 71, 68, 87],\n",
       "  [83, 68, 85, 86, 72, 66, 71, 68, 87, 68],\n",
       "  [68, 85, 86, 72, 66, 71, 68, 87, 68, 87],\n",
       "  [85, 86, 72, 66, 71, 68, 87, 68, 87, 92],\n",
       "  [86, 72, 66, 71, 68, 87, 68, 87, 92, 83],\n",
       "  [72, 66, 71, 68, 87, 68, 87, 92, 83, 72],\n",
       "  [66, 71, 68, 87, 68, 87, 92, 83, 72, 66],\n",
       "  [71, 68, 87, 68, 87, 92, 83, 72, 66, 86],\n",
       "  [68, 87, 68, 87, 92, 83, 72, 66, 86, 87],\n",
       "  [87, 68, 87, 92, 83, 72, 66, 86, 87, 85],\n",
       "  [68, 87, 92, 83, 72, 66, 86, 87, 85, 76],\n",
       "  [87, 92, 83, 72, 66, 86, 87, 85, 76, 81],\n",
       "  [92, 83, 72, 66, 86, 87, 85, 76, 81, 74],\n",
       "  [83, 72, 66, 86, 87, 85, 76, 81, 74, 11],\n",
       "  [72, 66, 86, 87, 85, 76, 81, 74, 11, 5],\n",
       "  [66, 86, 87, 85, 76, 81, 74, 11, 5, 76],\n",
       "  [86, 87, 85, 76, 81, 74, 11, 5, 76, 81],\n",
       "  [87, 85, 76, 81, 74, 11, 5, 76, 81, 87],\n",
       "  [85, 76, 81, 74, 11, 5, 76, 81, 87, 3],\n",
       "  [76, 81, 74, 11, 5, 76, 81, 87, 3, 5],\n",
       "  [81, 74, 11, 5, 76, 81, 87, 3, 5, 12],\n",
       "  [74, 11, 5, 76, 81, 87, 3, 5, 12, 2],\n",
       "  [11, 5, 76, 81, 87, 3, 5, 12, 2, 3],\n",
       "  [5, 76, 81, 87, 3, 5, 12, 2, 3, 3],\n",
       "  [76, 81, 87, 3, 5, 12, 2, 3, 3, 3],\n",
       "  [81, 87, 3, 5, 12, 2, 3, 3, 3, 3],\n",
       "  [87, 3, 5, 12, 2, 3, 3, 3, 3, 44],\n",
       "  [3, 5, 12, 2, 3, 3, 3, 3, 44, 81],\n",
       "  [5, 12, 2, 3, 3, 3, 3, 44, 81, 87],\n",
       "  [12, 2, 3, 3, 3, 3, 44, 81, 87, 72],\n",
       "  [2, 3, 3, 3, 3, 44, 81, 87, 72, 74],\n",
       "  [3, 3, 3, 3, 44, 81, 87, 72, 74, 72],\n",
       "  [3, 3, 3, 44, 81, 87, 72, 74, 72, 85],\n",
       "  [3, 3, 44, 81, 87, 72, 74, 72, 85, 55],\n",
       "  [3, 44, 81, 87, 72, 74, 72, 85, 55, 92],\n",
       "  [44, 81, 87, 72, 74, 72, 85, 55, 92, 83],\n",
       "  [81, 87, 72, 74, 72, 85, 55, 92, 83, 72],\n",
       "  [87, 72, 74, 72, 85, 55, 92, 83, 72, 2],\n",
       "  [72, 74, 72, 85, 55, 92, 83, 72, 2, 3],\n",
       "  [74, 72, 85, 55, 92, 83, 72, 2, 3, 3],\n",
       "  [72, 85, 55, 92, 83, 72, 2, 3, 3, 3],\n",
       "  [85, 55, 92, 83, 72, 2, 3, 3, 3, 3],\n",
       "  [55, 92, 83, 72, 2, 3, 3, 3, 3, 33],\n",
       "  [92, 83, 72, 2, 3, 3, 3, 3, 33, 33],\n",
       "  [83, 72, 2, 3, 3, 3, 3, 33, 33, 33],\n",
       "  [72, 2, 3, 3, 3, 3, 33, 33, 33, 3],\n",
       "  [2, 3, 3, 3, 3, 33, 33, 33, 3, 66],\n",
       "  [3, 3, 3, 3, 33, 33, 33, 3, 66, 83],\n",
       "  [3, 3, 3, 33, 33, 33, 3, 66, 83, 68],\n",
       "  [3, 3, 33, 33, 33, 3, 66, 83, 68, 85],\n",
       "  [3, 33, 33, 33, 3, 66, 83, 68, 85, 86],\n",
       "  [33, 33, 33, 3, 66, 83, 68, 85, 86, 72],\n",
       "  [33, 33, 3, 66, 83, 68, 85, 86, 72, 66],\n",
       "  [33, 3, 66, 83, 68, 85, 86, 72, 66, 71],\n",
       "  [3, 66, 83, 68, 85, 86, 72, 66, 71, 68],\n",
       "  [66, 83, 68, 85, 86, 72, 66, 71, 68, 87],\n",
       "  [83, 68, 85, 86, 72, 66, 71, 68, 87, 68],\n",
       "  [68, 85, 86, 72, 66, 71, 68, 87, 68, 87],\n",
       "  [85, 86, 72, 66, 71, 68, 87, 68, 87, 92],\n",
       "  [86, 72, 66, 71, 68, 87, 68, 87, 92, 83],\n",
       "  [72, 66, 71, 68, 87, 68, 87, 92, 83, 72],\n",
       "  [66, 71, 68, 87, 68, 87, 92, 83, 72, 66],\n",
       "  [71, 68, 87, 68, 87, 92, 83, 72, 66, 86],\n",
       "  [68, 87, 68, 87, 92, 83, 72, 66, 86, 87],\n",
       "  [87, 68, 87, 92, 83, 72, 66, 86, 87, 85],\n",
       "  [68, 87, 92, 83, 72, 66, 86, 87, 85, 76],\n",
       "  [87, 92, 83, 72, 66, 86, 87, 85, 76, 81],\n",
       "  [92, 83, 72, 66, 86, 87, 85, 76, 81, 74],\n",
       "  [83, 72, 66, 86, 87, 85, 76, 81, 74, 11],\n",
       "  [72, 66, 86, 87, 85, 76, 81, 74, 11, 5],\n",
       "  [66, 86, 87, 85, 76, 81, 74, 11, 5, 44],\n",
       "  [86, 87, 85, 76, 81, 74, 11, 5, 44, 49],\n",
       "  [87, 85, 76, 81, 74, 11, 5, 44, 49, 55],\n",
       "  [85, 76, 81, 74, 11, 5, 44, 49, 55, 3],\n",
       "  [76, 81, 74, 11, 5, 44, 49, 55, 3, 5],\n",
       "  [81, 74, 11, 5, 44, 49, 55, 3, 5, 12],\n",
       "  [74, 11, 5, 44, 49, 55, 3, 5, 12, 2],\n",
       "  [11, 5, 44, 49, 55, 3, 5, 12, 2, 3],\n",
       "  [5, 44, 49, 55, 3, 5, 12, 2, 3, 3],\n",
       "  [44, 49, 55, 3, 5, 12, 2, 3, 3, 3],\n",
       "  [49, 55, 3, 5, 12, 2, 3, 3, 3, 3],\n",
       "  [55, 3, 5, 12, 2, 3, 3, 3, 3, 44],\n",
       "  [3, 5, 12, 2, 3, 3, 3, 3, 44, 81],\n",
       "  [5, 12, 2, 3, 3, 3, 3, 44, 81, 87],\n",
       "  [12, 2, 3, 3, 3, 3, 44, 81, 87, 72],\n",
       "  [2, 3, 3, 3, 3, 44, 81, 87, 72, 74],\n",
       "  [3, 3, 3, 3, 44, 81, 87, 72, 74, 72],\n",
       "  [3, 3, 3, 44, 81, 87, 72, 74, 72, 85],\n",
       "  [3, 3, 44, 81, 87, 72, 74, 72, 85, 55],\n",
       "  [3, 44, 81, 87, 72, 74, 72, 85, 55, 92],\n",
       "  [44, 81, 87, 72, 74, 72, 85, 55, 92, 83],\n",
       "  [81, 87, 72, 74, 72, 85, 55, 92, 83, 72],\n",
       "  [87, 72, 74, 72, 85, 55, 92, 83, 72, 2],\n",
       "  [72, 74, 72, 85, 55, 92, 83, 72, 2, 3],\n",
       "  [74, 72, 85, 55, 92, 83, 72, 2, 3, 3],\n",
       "  [72, 85, 55, 92, 83, 72, 2, 3, 3, 3],\n",
       "  [85, 55, 92, 83, 72, 2, 3, 3, 3, 3],\n",
       "  [55, 92, 83, 72, 2, 3, 3, 3, 3, 33],\n",
       "  [92, 83, 72, 2, 3, 3, 3, 3, 33, 33],\n",
       "  [83, 72, 2, 3, 3, 3, 3, 33, 33, 33],\n",
       "  [72, 2, 3, 3, 3, 3, 33, 33, 33, 3],\n",
       "  [2, 3, 3, 3, 3, 33, 33, 33, 3, 66],\n",
       "  [3, 3, 3, 3, 33, 33, 33, 3, 66, 83],\n",
       "  [3, 3, 3, 33, 33, 33, 3, 66, 83, 68],\n",
       "  [3, 3, 33, 33, 33, 3, 66, 83, 68, 85],\n",
       "  [3, 33, 33, 33, 3, 66, 83, 68, 85, 86],\n",
       "  [33, 33, 33, 3, 66, 83, 68, 85, 86, 72],\n",
       "  [33, 33, 3, 66, 83, 68, 85, 86, 72, 66],\n",
       "  [33, 3, 66, 83, 68, 85, 86, 72, 66, 71],\n",
       "  [3, 66, 83, 68, 85, 86, 72, 66, 71, 68],\n",
       "  [66, 83, 68, 85, 86, 72, 66, 71, 68, 87],\n",
       "  [83, 68, 85, 86, 72, 66, 71, 68, 87, 68],\n",
       "  [68, 85, 86, 72, 66, 71, 68, 87, 68, 87],\n",
       "  [85, 86, 72, 66, 71, 68, 87, 68, 87, 92],\n",
       "  [86, 72, 66, 71, 68, 87, 68, 87, 92, 83],\n",
       "  [72, 66, 71, 68, 87, 68, 87, 92, 83, 72],\n",
       "  [66, 71, 68, 87, 68, 87, 92, 83, 72, 66],\n",
       "  [71, 68, 87, 68, 87, 92, 83, 72, 66, 86],\n",
       "  [68, 87, 68, 87, 92, 83, 72, 66, 86, 87],\n",
       "  [87, 68, 87, 92, 83, 72, 66, 86, 87, 85],\n",
       "  [68, 87, 92, 83, 72, 66, 86, 87, 85, 76],\n",
       "  [87, 92, 83, 72, 66, 86, 87, 85, 76, 81],\n",
       "  [92, 83, 72, 66, 86, 87, 85, 76, 81, 74],\n",
       "  [83, 72, 66, 86, 87, 85, 76, 81, 74, 11],\n",
       "  [72, 66, 86, 87, 85, 76, 81, 74, 11, 5],\n",
       "  [66, 86, 87, 85, 76, 81, 74, 11, 5, 68],\n",
       "  [86, 87, 85, 76, 81, 74, 11, 5, 68, 29],\n",
       "  [87, 85, 76, 81, 74, 11, 5, 68, 29, 3],\n",
       "  [85, 76, 81, 74, 11, 5, 68, 29, 3, 69],\n",
       "  [76, 81, 74, 11, 5, 68, 29, 3, 69, 92],\n",
       "  [81, 74, 11, 5, 68, 29, 3, 69, 92, 87],\n",
       "  [74, 11, 5, 68, 29, 3, 69, 92, 87, 72],\n",
       "  [11, 5, 68, 29, 3, 69, 92, 87, 72, 15],\n",
       "  [5, 68, 29, 3, 69, 92, 87, 72, 15, 3],\n",
       "  [68, 29, 3, 69, 92, 87, 72, 15, 3, 69],\n",
       "  [29, 3, 69, 92, 87, 72, 15, 3, 69, 29],\n",
       "  [3, 69, 92, 87, 72, 15, 3, 69, 29, 3],\n",
       "  [69, 92, 87, 72, 15, 3, 69, 29, 3, 71],\n",
       "  [92, 87, 72, 15, 3, 69, 29, 3, 71, 72],\n",
       "  [87, 72, 15, 3, 69, 29, 3, 71, 72, 70],\n",
       "  [72, 15, 3, 69, 29, 3, 71, 72, 70, 76],\n",
       "  [15, 3, 69, 29, 3, 71, 72, 70, 76, 80],\n",
       "  [3, 69, 29, 3, 71, 72, 70, 76, 80, 68],\n",
       "  [69, 29, 3, 71, 72, 70, 76, 80, 68, 79],\n",
       "  [29, 3, 71, 72, 70, 76, 80, 68, 79, 11],\n",
       "  [3, 71, 72, 70, 76, 80, 68, 79, 11, 3],\n",
       "  [71, 72, 70, 76, 80, 68, 79, 11, 3, 3],\n",
       "  [72, 70, 76, 80, 68, 79, 11, 3, 3, 20],\n",
       "  [70, 76, 80, 68, 79, 11, 3, 3, 20, 25],\n",
       "  [76, 80, 68, 79, 11, 3, 3, 20, 25, 3],\n",
       "  [80, 68, 79, 11, 3, 3, 20, 25, 3, 15],\n",
       "  [68, 79, 11, 3, 3, 20, 25, 3, 15, 3],\n",
       "  [79, 11, 3, 3, 20, 25, 3, 15, 3, 27],\n",
       "  [11, 3, 3, 20, 25, 3, 15, 3, 27, 3],\n",
       "  [3, 3, 20, 25, 3, 15, 3, 27, 3, 3],\n",
       "  [3, 20, 25, 3, 15, 3, 27, 3, 3, 3],\n",
       "  [20, 25, 3, 15, 3, 27, 3, 3, 3, 12],\n",
       "  [25, 3, 15, 3, 27, 3, 3, 3, 12, 3],\n",
       "  [3, 15, 3, 27, 3, 3, 3, 12, 3, 5],\n",
       "  [15, 3, 27, 3, 3, 3, 12, 3, 5, 12],\n",
       "  [3, 27, 3, 3, 3, 12, 3, 5, 12, 2],\n",
       "  [27, 3, 3, 3, 12, 3, 5, 12, 2, 3],\n",
       "  [3, 3, 3, 12, 3, 5, 12, 2, 3, 3],\n",
       "  [3, 3, 12, 3, 5, 12, 2, 3, 3, 3],\n",
       "  [3, 12, 3, 5, 12, 2, 3, 3, 3, 3],\n",
       "  [12, 3, 5, 12, 2, 3, 3, 3, 3, 54],\n",
       "  [3, 5, 12, 2, 3, 3, 3, 3, 54, 87],\n",
       "  [5, 12, 2, 3, 3, 3, 3, 54, 87, 85],\n",
       "  [12, 2, 3, 3, 3, 3, 54, 87, 85, 88],\n",
       "  [2, 3, 3, 3, 3, 54, 87, 85, 88, 70],\n",
       "  [3, 3, 3, 3, 54, 87, 85, 88, 70, 87],\n",
       "  [3, 3, 3, 54, 87, 85, 88, 70, 87, 55],\n",
       "  [3, 3, 54, 87, 85, 88, 70, 87, 55, 92],\n",
       "  [3, 54, 87, 85, 88, 70, 87, 55, 92, 83],\n",
       "  [54, 87, 85, 88, 70, 87, 55, 92, 83, 72],\n",
       "  [87, 85, 88, 70, 87, 55, 92, 83, 72, 11],\n",
       "  [85, 88, 70, 87, 55, 92, 83, 72, 11, 47],\n",
       "  [88, 70, 87, 55, 92, 83, 72, 11, 47, 76],\n",
       "  [70, 87, 55, 92, 83, 72, 11, 47, 76, 86],\n",
       "  [87, 55, 92, 83, 72, 11, 47, 76, 86, 87],\n",
       "  [55, 92, 83, 72, 11, 47, 76, 86, 87, 11],\n",
       "  [92, 83, 72, 11, 47, 76, 86, 87, 11, 54],\n",
       "  [83, 72, 11, 47, 76, 86, 87, 11, 54, 87],\n",
       "  [72, 11, 47, 76, 86, 87, 11, 54, 87, 85],\n",
       "  [11, 47, 76, 86, 87, 11, 54, 87, 85, 88],\n",
       "  [47, 76, 86, 87, 11, 54, 87, 85, 88, 70],\n",
       "  [76, 86, 87, 11, 54, 87, 85, 88, 70, 87],\n",
       "  [86, 87, 11, 54, 87, 85, 88, 70, 87, 41],\n",
       "  [87, 11, 54, 87, 85, 88, 70, 87, 41, 76],\n",
       "  [11, 54, 87, 85, 88, 70, 87, 41, 76, 72],\n",
       "  [54, 87, 85, 88, 70, 87, 41, 76, 72, 79],\n",
       "  [87, 85, 88, 70, 87, 41, 76, 72, 79, 71],\n",
       "  [85, 88, 70, 87, 41, 76, 72, 79, 71, 11],\n",
       "  [88, 70, 87, 41, 76, 72, 79, 71, 11, 68],\n",
       "  [70, 87, 41, 76, 72, 79, 71, 11, 68, 15],\n",
       "  [87, 41, 76, 72, 79, 71, 11, 68, 15, 37],\n",
       "  [41, 76, 72, 79, 71, 11, 68, 15, 37, 92],\n",
       "  [76, 72, 79, 71, 11, 68, 15, 37, 92, 87],\n",
       "  [72, 79, 71, 11, 68, 15, 37, 92, 87, 72],\n",
       "  [79, 71, 11, 68, 15, 37, 92, 87, 72, 55],\n",
       "  [71, 11, 68, 15, 37, 92, 87, 72, 55, 92],\n",
       "  [11, 68, 15, 37, 92, 87, 72, 55, 92, 83],\n",
       "  [68, 15, 37, 92, 87, 72, 55, 92, 83, 72],\n",
       "  [15, 37, 92, 87, 72, 55, 92, 83, 72, 15],\n",
       "  [37, 92, 87, 72, 55, 92, 83, 72, 15, 87],\n",
       "  [92, 87, 72, 55, 92, 83, 72, 15, 87, 85],\n",
       "  [87, 72, 55, 92, 83, 72, 15, 87, 85, 88],\n",
       "  [72, 55, 92, 83, 72, 15, 87, 85, 88, 72],\n",
       "  [55, 92, 83, 72, 15, 87, 85, 88, 72, 12],\n",
       "  [92, 83, 72, 15, 87, 85, 88, 72, 12, 15],\n",
       "  [83, 72, 15, 87, 85, 88, 72, 12, 15, 54],\n",
       "  [72, 15, 87, 85, 88, 72, 12, 15, 54, 87],\n",
       "  [15, 87, 85, 88, 72, 12, 15, 54, 87, 85],\n",
       "  [87, 85, 88, 72, 12, 15, 54, 87, 85, 88],\n",
       "  [85, 88, 72, 12, 15, 54, 87, 85, 88, 70],\n",
       "  [88, 72, 12, 15, 54, 87, 85, 88, 70, 87],\n",
       "  [72, 12, 15, 54, 87, 85, 88, 70, 87, 41],\n",
       "  [12, 15, 54, 87, 85, 88, 70, 87, 41, 76],\n",
       "  [15, 54, 87, 85, 88, 70, 87, 41, 76, 72],\n",
       "  [54, 87, 85, 88, 70, 87, 41, 76, 72, 79],\n",
       "  [87, 85, 88, 70, 87, 41, 76, 72, 79, 71],\n",
       "  [85, 88, 70, 87, 41, 76, 72, 79, 71, 11],\n",
       "  [88, 70, 87, 41, 76, 72, 79, 71, 11, 69],\n",
       "  [70, 87, 41, 76, 72, 79, 71, 11, 69, 15],\n",
       "  [87, 41, 76, 72, 79, 71, 11, 69, 15, 39],\n",
       "  [41, 76, 72, 79, 71, 11, 69, 15, 39, 72],\n",
       "  [76, 72, 79, 71, 11, 69, 15, 39, 72, 70],\n",
       "  [72, 79, 71, 11, 69, 15, 39, 72, 70, 76],\n",
       "  [79, 71, 11, 69, 15, 39, 72, 70, 76, 80],\n",
       "  [71, 11, 69, 15, 39, 72, 70, 76, 80, 68],\n",
       "  [11, 69, 15, 39, 72, 70, 76, 80, 68, 79],\n",
       "  [69, 15, 39, 72, 70, 76, 80, 68, 79, 55],\n",
       "  [15, 39, 72, 70, 76, 80, 68, 79, 55, 92],\n",
       "  [39, 72, 70, 76, 80, 68, 79, 55, 92, 83],\n",
       "  [72, 70, 76, 80, 68, 79, 55, 92, 83, 72],\n",
       "  [70, 76, 80, 68, 79, 55, 92, 83, 72, 11],\n",
       "  [76, 80, 68, 79, 55, 92, 83, 72, 11, 20],\n",
       "  [80, 68, 79, 55, 92, 83, 72, 11, 20, 25],\n",
       "  [68, 79, 55, 92, 83, 72, 11, 20, 25, 15],\n",
       "  [79, 55, 92, 83, 72, 11, 20, 25, 15, 27],\n",
       "  [55, 92, 83, 72, 11, 20, 25, 15, 27, 12],\n",
       "  [92, 83, 72, 11, 20, 25, 15, 27, 12, 15],\n",
       "  [83, 72, 11, 20, 25, 15, 27, 12, 15, 87],\n",
       "  [72, 11, 20, 25, 15, 27, 12, 15, 87, 85],\n",
       "  [11, 20, 25, 15, 27, 12, 15, 87, 85, 88],\n",
       "  [20, 25, 15, 27, 12, 15, 87, 85, 88, 72],\n",
       "  [25, 15, 27, 12, 15, 87, 85, 88, 72, 12],\n",
       "  [15, 27, 12, 15, 87, 85, 88, 72, 12, 12],\n",
       "  [27, 12, 15, 87, 85, 88, 72, 12, 12, 12],\n",
       "  [12, 15, 87, 85, 88, 72, 12, 12, 12, 2],\n",
       "  [15, 87, 85, 88, 72, 12, 12, 12, 2, 3],\n",
       "  [87, 85, 88, 72, 12, 12, 12, 2, 3, 3],\n",
       "  [85, 88, 72, 12, 12, 12, 2, 3, 3, 3],\n",
       "  [88, 72, 12, 12, 12, 2, 3, 3, 3, 3],\n",
       "  [72, 12, 12, 12, 2, 3, 3, 3, 3, 33],\n",
       "  [12, 12, 12, 2, 3, 3, 3, 3, 33, 33],\n",
       "  [12, 12, 2, 3, 3, 3, 3, 33, 33, 33],\n",
       "  [12, 2, 3, 3, 3, 3, 33, 33, 33, 3],\n",
       "  [2, 3, 3, 3, 3, 33, 33, 33, 3, 66],\n",
       "  [3, 3, 3, 3, 33, 33, 33, 3, 66, 83],\n",
       "  [3, 3, 3, 33, 33, 33, 3, 66, 83, 68],\n",
       "  [3, 3, 33, 33, 33, 3, 66, 83, 68, 85],\n",
       "  [3, 33, 33, 33, 3, 66, 83, 68, 85, 86],\n",
       "  [33, 33, 33, 3, 66, 83, 68, 85, 86, 72],\n",
       "  [33, 33, 3, 66, 83, 68, 85, 86, 72, 66],\n",
       "  [33, 3, 66, 83, 68, 85, 86, 72, 66, 71],\n",
       "  [3, 66, 83, 68, 85, 86, 72, 66, 71, 68],\n",
       "  [66, 83, 68, 85, 86, 72, 66, 71, 68, 87],\n",
       "  [83, 68, 85, 86, 72, 66, 71, 68, 87, 68],\n",
       "  [68, 85, 86, 72, 66, 71, 68, 87, 68, 87],\n",
       "  [85, 86, 72, 66, 71, 68, 87, 68, 87, 92],\n",
       "  [86, 72, 66, 71, 68, 87, 68, 87, 92, 83],\n",
       "  [72, 66, 71, 68, 87, 68, 87, 92, 83, 72],\n",
       "  [66, 71, 68, 87, 68, 87, 92, 83, 72, 66],\n",
       "  [71, 68, 87, 68, 87, 92, 83, 72, 66, 86],\n",
       "  [68, 87, 68, 87, 92, 83, 72, 66, 86, 87],\n",
       "  [87, 68, 87, 92, 83, 72, 66, 86, 87, 85],\n",
       "  [68, 87, 92, 83, 72, 66, 86, 87, 85, 76],\n",
       "  [87, 92, 83, 72, 66, 86, 87, 85, 76, 81],\n",
       "  [92, 83, 72, 66, 86, 87, 85, 76, 81, 74],\n",
       "  [83, 72, 66, 86, 87, 85, 76, 81, 74, 11],\n",
       "  [72, 66, 86, 87, 85, 76, 81, 74, 11, 5],\n",
       "  [66, 86, 87, 85, 76, 81, 74, 11, 5, 68],\n",
       "  [86, 87, 85, 76, 81, 74, 11, 5, 68, 3],\n",
       "  [87, 85, 76, 81, 74, 11, 5, 68, 3, 39],\n",
       "  [85, 76, 81, 74, 11, 5, 68, 3, 39, 50],\n",
       "  [76, 81, 74, 11, 5, 68, 3, 39, 50, 56],\n",
       "  [81, 74, 11, 5, 68, 3, 39, 50, 56, 37],\n",
       "  [74, 11, 5, 68, 3, 39, 50, 56, 37, 47],\n",
       "  [11, 5, 68, 3, 39, 50, 56, 37, 47, 40],\n",
       "  [5, 68, 3, 39, 50, 56, 37, 47, 40, 15],\n",
       "  [68, 3, 39, 50, 56, 37, 47, 40, 15, 3],\n",
       "  [3, 39, 50, 56, 37, 47, 40, 15, 3, 69],\n",
       "  [39, 50, 56, 37, 47, 40, 15, 3, 69, 3],\n",
       "  [50, 56, 37, 47, 40, 15, 3, 69, 3, 54],\n",
       "  [56, 37, 47, 40, 15, 3, 69, 3, 54, 55],\n",
       "  [37, 47, 40, 15, 3, 69, 3, 54, 55, 53],\n",
       "  [47, 40, 15, 3, 69, 3, 54, 55, 53, 44],\n",
       "  [40, 15, 3, 69, 3, 54, 55, 53, 44, 49],\n",
       "  [15, 3, 69, 3, 54, 55, 53, 44, 49, 42],\n",
       "  [3, 69, 3, 54, 55, 53, 44, 49, 42, 5],\n",
       "  [69, 3, 54, 55, 53, 44, 49, 42, 5, 12],\n",
       "  [3, 54, 55, 53, 44, 49, 42, 5, 12, 2],\n",
       "  [54, 55, 53, 44, 49, 42, 5, 12, 2, 3],\n",
       "  [55, 53, 44, 49, 42, 5, 12, 2, 3, 3],\n",
       "  [53, 44, 49, 42, 5, 12, 2, 3, 3, 3],\n",
       "  [44, 49, 42, 5, 12, 2, 3, 3, 3, 3],\n",
       "  [49, 42, 5, 12, 2, 3, 3, 3, 3, 54],\n",
       "  [42, 5, 12, 2, 3, 3, 3, 3, 54, 87],\n",
       "  [5, 12, 2, 3, 3, 3, 3, 54, 87, 85],\n",
       "  [12, 2, 3, 3, 3, 3, 54, 87, 85, 88],\n",
       "  [2, 3, 3, 3, 3, 54, 87, 85, 88, 70],\n",
       "  [3, 3, 3, 3, 54, 87, 85, 88, 70, 87],\n",
       "  [3, 3, 3, 54, 87, 85, 88, 70, 87, 55],\n",
       "  [3, 3, 54, 87, 85, 88, 70, 87, 55, 92],\n",
       "  [3, 54, 87, 85, 88, 70, 87, 55, 92, 83],\n",
       "  [54, 87, 85, 88, 70, 87, 55, 92, 83, 72],\n",
       "  [87, 85, 88, 70, 87, 55, 92, 83, 72, 11],\n",
       "  [85, 88, 70, 87, 55, 92, 83, 72, 11, 47],\n",
       "  [88, 70, 87, 55, 92, 83, 72, 11, 47, 76],\n",
       "  [70, 87, 55, 92, 83, 72, 11, 47, 76, 86],\n",
       "  [87, 55, 92, 83, 72, 11, 47, 76, 86, 87],\n",
       "  [55, 92, 83, 72, 11, 47, 76, 86, 87, 11],\n",
       "  [92, 83, 72, 11, 47, 76, 86, 87, 11, 54],\n",
       "  [83, 72, 11, 47, 76, 86, 87, 11, 54, 87],\n",
       "  [72, 11, 47, 76, 86, 87, 11, 54, 87, 85],\n",
       "  [11, 47, 76, 86, 87, 11, 54, 87, 85, 88],\n",
       "  [47, 76, 86, 87, 11, 54, 87, 85, 88, 70],\n",
       "  [76, 86, 87, 11, 54, 87, 85, 88, 70, 87],\n",
       "  [86, 87, 11, 54, 87, 85, 88, 70, 87, 41],\n",
       "  [87, 11, 54, 87, 85, 88, 70, 87, 41, 76],\n",
       "  [11, 54, 87, 85, 88, 70, 87, 41, 76, 72],\n",
       "  [54, 87, 85, 88, 70, 87, 41, 76, 72, 79],\n",
       "  [87, 85, 88, 70, 87, 41, 76, 72, 79, 71],\n",
       "  [85, 88, 70, 87, 41, 76, 72, 79, 71, 11],\n",
       "  [88, 70, 87, 41, 76, 72, 79, 71, 11, 68],\n",
       "  [70, 87, 41, 76, 72, 79, 71, 11, 68, 15],\n",
       "  [87, 41, 76, 72, 79, 71, 11, 68, 15, 39],\n",
       "  [41, 76, 72, 79, 71, 11, 68, 15, 39, 82],\n",
       "  [76, 72, 79, 71, 11, 68, 15, 39, 82, 88],\n",
       "  [72, 79, 71, 11, 68, 15, 39, 82, 88, 69],\n",
       "  [79, 71, 11, 68, 15, 39, 82, 88, 69, 79],\n",
       "  [71, 11, 68, 15, 39, 82, 88, 69, 79, 72],\n",
       "  [11, 68, 15, 39, 82, 88, 69, 79, 72, 55],\n",
       "  [68, 15, 39, 82, 88, 69, 79, 72, 55, 92],\n",
       "  [15, 39, 82, 88, 69, 79, 72, 55, 92, 83],\n",
       "  [39, 82, 88, 69, 79, 72, 55, 92, 83, 72],\n",
       "  [82, 88, 69, 79, 72, 55, 92, 83, 72, 15],\n",
       "  [88, 69, 79, 72, 55, 92, 83, 72, 15, 87],\n",
       "  [69, 79, 72, 55, 92, 83, 72, 15, 87, 85],\n",
       "  [79, 72, 55, 92, 83, 72, 15, 87, 85, 88],\n",
       "  [72, 55, 92, 83, 72, 15, 87, 85, 88, 72],\n",
       "  [55, 92, 83, 72, 15, 87, 85, 88, 72, 12],\n",
       "  [92, 83, 72, 15, 87, 85, 88, 72, 12, 15],\n",
       "  [83, 72, 15, 87, 85, 88, 72, 12, 15, 54],\n",
       "  [72, 15, 87, 85, 88, 72, 12, 15, 54, 87],\n",
       "  [15, 87, 85, 88, 72, 12, 15, 54, 87, 85],\n",
       "  [87, 85, 88, 72, 12, 15, 54, 87, 85, 88],\n",
       "  [85, 88, 72, 12, 15, 54, 87, 85, 88, 70],\n",
       "  [88, 72, 12, 15, 54, 87, 85, 88, 70, 87],\n",
       "  [72, 12, 15, 54, 87, 85, 88, 70, 87, 41],\n",
       "  [12, 15, 54, 87, 85, 88, 70, 87, 41, 76],\n",
       "  [15, 54, 87, 85, 88, 70, 87, 41, 76, 72],\n",
       "  [54, 87, 85, 88, 70, 87, 41, 76, 72, 79],\n",
       "  [87, 85, 88, 70, 87, 41, 76, 72, 79, 71],\n",
       "  [85, 88, 70, 87, 41, 76, 72, 79, 71, 11],\n",
       "  [88, 70, 87, 41, 76, 72, 79, 71, 11, 69],\n",
       "  [70, 87, 41, 76, 72, 79, 71, 11, 69, 15],\n",
       "  [87, 41, 76, 72, 79, 71, 11, 69, 15, 54],\n",
       "  [41, 76, 72, 79, 71, 11, 69, 15, 54, 87],\n",
       "  [76, 72, 79, 71, 11, 69, 15, 54, 87, 85],\n",
       "  [72, 79, 71, 11, 69, 15, 54, 87, 85, 76],\n",
       "  [79, 71, 11, 69, 15, 54, 87, 85, 76, 81],\n",
       "  [71, 11, 69, 15, 54, 87, 85, 76, 81, 74],\n",
       "  [11, 69, 15, 54, 87, 85, 76, 81, 74, 55],\n",
       "  [69, 15, 54, 87, 85, 76, 81, 74, 55, 92],\n",
       "  [15, 54, 87, 85, 76, 81, 74, 55, 92, 83],\n",
       "  [54, 87, 85, 76, 81, 74, 55, 92, 83, 72],\n",
       "  [87, 85, 76, 81, 74, 55, 92, 83, 72, 15],\n",
       "  [85, 76, 81, 74, 55, 92, 83, 72, 15, 87],\n",
       "  [76, 81, 74, 55, 92, 83, 72, 15, 87, 85],\n",
       "  [81, 74, 55, 92, 83, 72, 15, 87, 85, 88],\n",
       "  [74, 55, 92, 83, 72, 15, 87, 85, 88, 72],\n",
       "  [55, 92, 83, 72, 15, 87, 85, 88, 72, 12],\n",
       "  [92, 83, 72, 15, 87, 85, 88, 72, 12, 12],\n",
       "  [83, 72, 15, 87, 85, 88, 72, 12, 12, 12],\n",
       "  [72, 15, 87, 85, 88, 72, 12, 12, 12, 2],\n",
       "  [15, 87, 85, 88, 72, 12, 12, 12, 2, 3],\n",
       "  [87, 85, 88, 72, 12, 12, 12, 2, 3, 3],\n",
       "  [85, 88, 72, 12, 12, 12, 2, 3, 3, 3],\n",
       "  [88, 72, 12, 12, 12, 2, 3, 3, 3, 3],\n",
       "  [72, 12, 12, 12, 2, 3, 3, 3, 3, 33],\n",
       "  [12, 12, 12, 2, 3, 3, 3, 3, 33, 33],\n",
       "  [12, 12, 2, 3, 3, 3, 3, 33, 33, 33],\n",
       "  [12, 2, 3, 3, 3, 3, 33, 33, 33, 3],\n",
       "  [2, 3, 3, 3, 3, 33, 33, 33, 3, 66],\n",
       "  [3, 3, 3, 3, 33, 33, 33, 3, 66, 83],\n",
       "  [3, 3, 3, 33, 33, 33, 3, 66, 83, 68],\n",
       "  [3, 3, 33, 33, 33, 3, 66, 83, 68, 85],\n",
       "  [3, 33, 33, 33, 3, 66, 83, 68, 85, 86],\n",
       "  [33, 33, 33, 3, 66, 83, 68, 85, 86, 72],\n",
       "  [33, 33, 3, 66, 83, 68, 85, 86, 72, 66],\n",
       "  [33, 3, 66, 83, 68, 85, 86, 72, 66, 71],\n",
       "  [3, 66, 83, 68, 85, 86, 72, 66, 71, 68],\n",
       "  [66, 83, 68, 85, 86, 72, 66, 71, 68, 87],\n",
       "  [83, 68, 85, 86, 72, 66, 71, 68, 87, 68],\n",
       "  [68, 85, 86, 72, 66, 71, 68, 87, 68, 87],\n",
       "  [85, 86, 72, 66, 71, 68, 87, 68, 87, 92],\n",
       "  [86, 72, 66, 71, 68, 87, 68, 87, 92, 83],\n",
       "  [72, 66, 71, 68, 87, 68, 87, 92, 83, 72],\n",
       "  [66, 71, 68, 87, 68, 87, 92, 83, 72, 66],\n",
       "  [71, 68, 87, 68, 87, 92, 83, 72, 66, 86],\n",
       "  [68, 87, 68, 87, 92, 83, 72, 66, 86, 87],\n",
       "  [87, 68, 87, 92, 83, 72, 66, 86, 87, 85],\n",
       "  [68, 87, 92, 83, 72, 66, 86, 87, 85, 76],\n",
       "  [87, 92, 83, 72, 66, 86, 87, 85, 76, 81],\n",
       "  [92, 83, 72, 66, 86, 87, 85, 76, 81, 74],\n",
       "  [83, 72, 66, 86, 87, 85, 76, 81, 74, 11],\n",
       "  [72, 66, 86, 87, 85, 76, 81, 74, 11, 5],\n",
       "  [66, 86, 87, 85, 76, 81, 74, 11, 5, 68],\n",
       "  [86, 87, 85, 76, 81, 74, 11, 5, 68, 29],\n",
       "  [87, 85, 76, 81, 74, 11, 5, 68, 29, 3],\n",
       "  [85, 76, 81, 74, 11, 5, 68, 29, 3, 68],\n",
       "  [76, 81, 74, 11, 5, 68, 29, 3, 68, 85],\n",
       "  [81, 74, 11, 5, 68, 29, 3, 68, 85, 85],\n",
       "  [74, 11, 5, 68, 29, 3, 68, 85, 85, 68],\n",
       "  [11, 5, 68, 29, 3, 68, 85, 85, 68, 92],\n",
       "  [5, 68, 29, 3, 68, 85, 85, 68, 92, 31],\n",
       "  [68, 29, 3, 68, 85, 85, 68, 92, 31, 3],\n",
       "  [29, 3, 68, 85, 85, 68, 92, 31, 3, 86],\n",
       "  [3, 68, 85, 85, 68, 92, 31, 3, 86, 75],\n",
       "  [68, 85, 85, 68, 92, 31, 3, 86, 75, 82],\n",
       "  [85, 85, 68, 92, 31, 3, 86, 75, 82, 85],\n",
       "  [85, 68, 92, 31, 3, 86, 75, 82, 85, 87],\n",
       "  [68, 92, 31, 3, 86, 75, 82, 85, 87, 33],\n",
       "  [92, 31, 3, 86, 75, 82, 85, 87, 33, 5],\n",
       "  [31, 3, 86, 75, 82, 85, 87, 33, 5, 12],\n",
       "  [3, 86, 75, 82, 85, 87, 33, 5, 12, 2],\n",
       "  [86, 75, 82, 85, 87, 33, 5, 12, 2, 3],\n",
       "  [75, 82, 85, 87, 33, 5, 12, 2, 3, 3],\n",
       "  [82, 85, 87, 33, 5, 12, 2, 3, 3, 3],\n",
       "  [85, 87, 33, 5, 12, 2, 3, 3, 3, 3],\n",
       "  [87, 33, 5, 12, 2, 3, 3, 3, 3, 54],\n",
       "  [33, 5, 12, 2, 3, 3, 3, 3, 54, 87],\n",
       "  [5, 12, 2, 3, 3, 3, 3, 54, 87, 85],\n",
       "  [12, 2, 3, 3, 3, 3, 54, 87, 85, 88],\n",
       "  ...],\n",
       " 'labels': [0,\n",
       "  0,\n",
       "  0,\n",
       "  0,\n",
       "  0,\n",
       "  0,\n",
       "  0,\n",
       "  0,\n",
       "  0,\n",
       "  0,\n",
       "  71,\n",
       "  72,\n",
       "  73,\n",
       "  3,\n",
       "  66,\n",
       "  83,\n",
       "  68,\n",
       "  85,\n",
       "  86,\n",
       "  72,\n",
       "  66,\n",
       "  71,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  66,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  11,\n",
       "  86,\n",
       "  12,\n",
       "  29,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  5,\n",
       "  5,\n",
       "  5,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  51,\n",
       "  68,\n",
       "  85,\n",
       "  86,\n",
       "  72,\n",
       "  86,\n",
       "  3,\n",
       "  87,\n",
       "  75,\n",
       "  72,\n",
       "  3,\n",
       "  74,\n",
       "  76,\n",
       "  89,\n",
       "  72,\n",
       "  81,\n",
       "  3,\n",
       "  71,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  3,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  3,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  3,\n",
       "  87,\n",
       "  82,\n",
       "  3,\n",
       "  68,\n",
       "  3,\n",
       "  29,\n",
       "  70,\n",
       "  79,\n",
       "  68,\n",
       "  86,\n",
       "  86,\n",
       "  29,\n",
       "  67,\n",
       "  39,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  67,\n",
       "  17,\n",
       "  3,\n",
       "  55,\n",
       "  75,\n",
       "  72,\n",
       "  3,\n",
       "  71,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  3,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  3,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  3,\n",
       "  73,\n",
       "  82,\n",
       "  85,\n",
       "  80,\n",
       "  68,\n",
       "  87,\n",
       "  3,\n",
       "  72,\n",
       "  84,\n",
       "  88,\n",
       "  68,\n",
       "  79,\n",
       "  86,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  87,\n",
       "  82,\n",
       "  3,\n",
       "  29,\n",
       "  70,\n",
       "  79,\n",
       "  68,\n",
       "  86,\n",
       "  86,\n",
       "  29,\n",
       "  67,\n",
       "  39,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  17,\n",
       "  86,\n",
       "  76,\n",
       "  80,\n",
       "  83,\n",
       "  79,\n",
       "  72,\n",
       "  54,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  67,\n",
       "  15,\n",
       "  3,\n",
       "  72,\n",
       "  91,\n",
       "  70,\n",
       "  72,\n",
       "  83,\n",
       "  87,\n",
       "  3,\n",
       "  87,\n",
       "  75,\n",
       "  68,\n",
       "  87,\n",
       "  3,\n",
       "  87,\n",
       "  82,\n",
       "  83,\n",
       "  3,\n",
       "  79,\n",
       "  72,\n",
       "  89,\n",
       "  72,\n",
       "  79,\n",
       "  3,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  70,\n",
       "  87,\n",
       "  3,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  3,\n",
       "  70,\n",
       "  68,\n",
       "  81,\n",
       "  3,\n",
       "  82,\n",
       "  80,\n",
       "  76,\n",
       "  87,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  87,\n",
       "  75,\n",
       "  72,\n",
       "  3,\n",
       "  67,\n",
       "  67,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  70,\n",
       "  87,\n",
       "  31,\n",
       "  33,\n",
       "  67,\n",
       "  67,\n",
       "  3,\n",
       "  68,\n",
       "  81,\n",
       "  71,\n",
       "  3,\n",
       "  68,\n",
       "  87,\n",
       "  82,\n",
       "  80,\n",
       "  76,\n",
       "  70,\n",
       "  3,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  86,\n",
       "  3,\n",
       "  88,\n",
       "  86,\n",
       "  72,\n",
       "  3,\n",
       "  67,\n",
       "  67,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  49,\n",
       "  68,\n",
       "  80,\n",
       "  72,\n",
       "  11,\n",
       "  12,\n",
       "  67,\n",
       "  67,\n",
       "  3,\n",
       "  68,\n",
       "  86,\n",
       "  3,\n",
       "  87,\n",
       "  75,\n",
       "  72,\n",
       "  76,\n",
       "  85,\n",
       "  3,\n",
       "  73,\n",
       "  82,\n",
       "  85,\n",
       "  80,\n",
       "  68,\n",
       "  87,\n",
       "  15,\n",
       "  3,\n",
       "  72,\n",
       "  17,\n",
       "  74,\n",
       "  17,\n",
       "  3,\n",
       "  88,\n",
       "  86,\n",
       "  72,\n",
       "  3,\n",
       "  67,\n",
       "  67,\n",
       "  69,\n",
       "  92,\n",
       "  87,\n",
       "  72,\n",
       "  67,\n",
       "  67,\n",
       "  3,\n",
       "  76,\n",
       "  81,\n",
       "  86,\n",
       "  87,\n",
       "  72,\n",
       "  68,\n",
       "  71,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  82,\n",
       "  73,\n",
       "  3,\n",
       "  67,\n",
       "  67,\n",
       "  87,\n",
       "  76,\n",
       "  81,\n",
       "  92,\n",
       "  76,\n",
       "  81,\n",
       "  87,\n",
       "  67,\n",
       "  67,\n",
       "  3,\n",
       "  73,\n",
       "  82,\n",
       "  85,\n",
       "  3,\n",
       "  29,\n",
       "  70,\n",
       "  79,\n",
       "  68,\n",
       "  86,\n",
       "  86,\n",
       "  29,\n",
       "  67,\n",
       "  37,\n",
       "  92,\n",
       "  87,\n",
       "  72,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  67,\n",
       "  17,\n",
       "  3,\n",
       "  58,\n",
       "  72,\n",
       "  3,\n",
       "  70,\n",
       "  68,\n",
       "  81,\n",
       "  3,\n",
       "  68,\n",
       "  79,\n",
       "  86,\n",
       "  82,\n",
       "  3,\n",
       "  88,\n",
       "  86,\n",
       "  72,\n",
       "  3,\n",
       "  67,\n",
       "  67,\n",
       "  76,\n",
       "  81,\n",
       "  87,\n",
       "  67,\n",
       "  67,\n",
       "  3,\n",
       "  68,\n",
       "  86,\n",
       "  3,\n",
       "  68,\n",
       "  3,\n",
       "  86,\n",
       "  75,\n",
       "  82,\n",
       "  85,\n",
       "  87,\n",
       "  3,\n",
       "  81,\n",
       "  68,\n",
       "  80,\n",
       "  72,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  73,\n",
       "  82,\n",
       "  85,\n",
       "  3,\n",
       "  29,\n",
       "  70,\n",
       "  79,\n",
       "  68,\n",
       "  86,\n",
       "  86,\n",
       "  29,\n",
       "  67,\n",
       "  44,\n",
       "  81,\n",
       "  87,\n",
       "  72,\n",
       "  74,\n",
       "  72,\n",
       "  85,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  67,\n",
       "  17,\n",
       "  3,\n",
       "  54,\n",
       "  76,\n",
       "  81,\n",
       "  70,\n",
       "  72,\n",
       "  3,\n",
       "  54,\n",
       "  83,\n",
       "  68,\n",
       "  85,\n",
       "  78,\n",
       "  3,\n",
       "  21,\n",
       "  17,\n",
       "  22,\n",
       "  15,\n",
       "  3,\n",
       "  87,\n",
       "  75,\n",
       "  76,\n",
       "  86,\n",
       "  3,\n",
       "  68,\n",
       "  79,\n",
       "  86,\n",
       "  82,\n",
       "  3,\n",
       "  86,\n",
       "  88,\n",
       "  83,\n",
       "  83,\n",
       "  82,\n",
       "  85,\n",
       "  87,\n",
       "  86,\n",
       "  3,\n",
       "  68,\n",
       "  3,\n",
       "  86,\n",
       "  70,\n",
       "  75,\n",
       "  72,\n",
       "  80,\n",
       "  68,\n",
       "  3,\n",
       "  76,\n",
       "  81,\n",
       "  3,\n",
       "  68,\n",
       "  3,\n",
       "  39,\n",
       "  39,\n",
       "  47,\n",
       "  16,\n",
       "  73,\n",
       "  82,\n",
       "  85,\n",
       "  80,\n",
       "  68,\n",
       "  87,\n",
       "  87,\n",
       "  72,\n",
       "  71,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  3,\n",
       "  68,\n",
       "  81,\n",
       "  71,\n",
       "  3,\n",
       "  70,\n",
       "  68,\n",
       "  86,\n",
       "  72,\n",
       "  16,\n",
       "  76,\n",
       "  81,\n",
       "  86,\n",
       "  72,\n",
       "  81,\n",
       "  86,\n",
       "  76,\n",
       "  87,\n",
       "  76,\n",
       "  89,\n",
       "  72,\n",
       "  3,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  86,\n",
       "  17,\n",
       "  2,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  33,\n",
       "  33,\n",
       "  33,\n",
       "  3,\n",
       "  66,\n",
       "  83,\n",
       "  68,\n",
       "  85,\n",
       "  86,\n",
       "  72,\n",
       "  66,\n",
       "  71,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  66,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  11,\n",
       "  5,\n",
       "  76,\n",
       "  81,\n",
       "  87,\n",
       "  3,\n",
       "  5,\n",
       "  12,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  44,\n",
       "  81,\n",
       "  87,\n",
       "  72,\n",
       "  74,\n",
       "  72,\n",
       "  85,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  33,\n",
       "  33,\n",
       "  33,\n",
       "  3,\n",
       "  66,\n",
       "  83,\n",
       "  68,\n",
       "  85,\n",
       "  86,\n",
       "  72,\n",
       "  66,\n",
       "  71,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  66,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  11,\n",
       "  5,\n",
       "  44,\n",
       "  49,\n",
       "  55,\n",
       "  3,\n",
       "  5,\n",
       "  12,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  44,\n",
       "  81,\n",
       "  87,\n",
       "  72,\n",
       "  74,\n",
       "  72,\n",
       "  85,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  33,\n",
       "  33,\n",
       "  33,\n",
       "  3,\n",
       "  66,\n",
       "  83,\n",
       "  68,\n",
       "  85,\n",
       "  86,\n",
       "  72,\n",
       "  66,\n",
       "  71,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  66,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  11,\n",
       "  5,\n",
       "  68,\n",
       "  29,\n",
       "  3,\n",
       "  69,\n",
       "  92,\n",
       "  87,\n",
       "  72,\n",
       "  15,\n",
       "  3,\n",
       "  69,\n",
       "  29,\n",
       "  3,\n",
       "  71,\n",
       "  72,\n",
       "  70,\n",
       "  76,\n",
       "  80,\n",
       "  68,\n",
       "  79,\n",
       "  11,\n",
       "  3,\n",
       "  3,\n",
       "  20,\n",
       "  25,\n",
       "  3,\n",
       "  15,\n",
       "  3,\n",
       "  27,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  12,\n",
       "  3,\n",
       "  5,\n",
       "  12,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  54,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  70,\n",
       "  87,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  11,\n",
       "  47,\n",
       "  76,\n",
       "  86,\n",
       "  87,\n",
       "  11,\n",
       "  54,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  70,\n",
       "  87,\n",
       "  41,\n",
       "  76,\n",
       "  72,\n",
       "  79,\n",
       "  71,\n",
       "  11,\n",
       "  68,\n",
       "  15,\n",
       "  37,\n",
       "  92,\n",
       "  87,\n",
       "  72,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  15,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  72,\n",
       "  12,\n",
       "  15,\n",
       "  54,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  70,\n",
       "  87,\n",
       "  41,\n",
       "  76,\n",
       "  72,\n",
       "  79,\n",
       "  71,\n",
       "  11,\n",
       "  69,\n",
       "  15,\n",
       "  39,\n",
       "  72,\n",
       "  70,\n",
       "  76,\n",
       "  80,\n",
       "  68,\n",
       "  79,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  11,\n",
       "  20,\n",
       "  25,\n",
       "  15,\n",
       "  27,\n",
       "  12,\n",
       "  15,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  72,\n",
       "  12,\n",
       "  12,\n",
       "  12,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  33,\n",
       "  33,\n",
       "  33,\n",
       "  3,\n",
       "  66,\n",
       "  83,\n",
       "  68,\n",
       "  85,\n",
       "  86,\n",
       "  72,\n",
       "  66,\n",
       "  71,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  66,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  11,\n",
       "  5,\n",
       "  68,\n",
       "  3,\n",
       "  39,\n",
       "  50,\n",
       "  56,\n",
       "  37,\n",
       "  47,\n",
       "  40,\n",
       "  15,\n",
       "  3,\n",
       "  69,\n",
       "  3,\n",
       "  54,\n",
       "  55,\n",
       "  53,\n",
       "  44,\n",
       "  49,\n",
       "  42,\n",
       "  5,\n",
       "  12,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  54,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  70,\n",
       "  87,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  11,\n",
       "  47,\n",
       "  76,\n",
       "  86,\n",
       "  87,\n",
       "  11,\n",
       "  54,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  70,\n",
       "  87,\n",
       "  41,\n",
       "  76,\n",
       "  72,\n",
       "  79,\n",
       "  71,\n",
       "  11,\n",
       "  68,\n",
       "  15,\n",
       "  39,\n",
       "  82,\n",
       "  88,\n",
       "  69,\n",
       "  79,\n",
       "  72,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  15,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  72,\n",
       "  12,\n",
       "  15,\n",
       "  54,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  70,\n",
       "  87,\n",
       "  41,\n",
       "  76,\n",
       "  72,\n",
       "  79,\n",
       "  71,\n",
       "  11,\n",
       "  69,\n",
       "  15,\n",
       "  54,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  55,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  15,\n",
       "  87,\n",
       "  85,\n",
       "  88,\n",
       "  72,\n",
       "  12,\n",
       "  12,\n",
       "  12,\n",
       "  2,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  3,\n",
       "  33,\n",
       "  33,\n",
       "  33,\n",
       "  3,\n",
       "  66,\n",
       "  83,\n",
       "  68,\n",
       "  85,\n",
       "  86,\n",
       "  72,\n",
       "  66,\n",
       "  71,\n",
       "  68,\n",
       "  87,\n",
       "  68,\n",
       "  87,\n",
       "  92,\n",
       "  83,\n",
       "  72,\n",
       "  66,\n",
       "  86,\n",
       "  87,\n",
       "  85,\n",
       "  76,\n",
       "  81,\n",
       "  74,\n",
       "  11,\n",
       "  5,\n",
       "  68,\n",
       "  29,\n",
       "  3,\n",
       "  68,\n",
       "  85,\n",
       "  85,\n",
       "  68,\n",
       "  92,\n",
       "  31,\n",
       "  3,\n",
       "  86,\n",
       "  75,\n",
       "  82,\n",
       "  85,\n",
       "  87,\n",
       "  33,\n",
       "  5,\n",
       "  12,\n",
       "  ...]}"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "process(datasets,tokenizer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将数据分为训练集和测试集\n",
    "tokenized = datasets.train_test_split(test_size=0.1,seed = 1024,shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9bb7248136be4887a0e8bec5fa5a04a4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Map:   0%|          | 0/617 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6bf8e24b6df6401bb67f677211335f73",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Map:   0%|          | 0/69 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = lambda x : process(x,tokenizer)\n",
    "tokenized = tokenized.map(f, batched=True,remove_columns=datasets.column_names)\n",
    "tokenized.set_format(type=\"torch\",device = \"cpu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([645401])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tokenized['train']['labels'].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义超参数\n",
    "batch_size = 100\n",
    "lr = 0.01\n",
    "eval_iters = 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_loader = DataLoader(tokenized['train'],batch_size=batch_size,shuffle=True)\n",
    "test_loader = DataLoader(tokenized['test'],batch_size=batch_size,shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'inputs': tensor([[71, 86, 11, 76, 81, 73, 76, 79, 72, 12],\n",
       "         [73, 15,  3, 83, 68, 85, 68, 80, 12,  2],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3, 84, 88, 82],\n",
       "         [86, 87, 12, 29,  2,  3,  3,  3,  3,  3],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3,  3,  3,  3],\n",
       "         [ 3, 33, 33, 33,  2,  3,  3,  3,  3,  3],\n",
       "         [80, 86,  3, 32,  3, 54, 83, 68, 85, 78],\n",
       "         [85, 72, 68, 87, 72, 71,  3, 76, 81,  3],\n",
       "         [82, 81, 38, 82, 81, 87, 72, 91, 87, 45],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3, 83, 68, 85],\n",
       "         [79, 88, 86, 87, 72, 85, 44, 81, 76, 87],\n",
       "         [38, 82, 81, 87, 72, 91, 87,  3, 32,  3],\n",
       "         [ 3,  3,  3, 85, 72, 87, 88, 85, 81,  3],\n",
       "         [68, 70, 78, 17, 72, 81, 68, 69, 79, 72],\n",
       "         [15,  3, 73, 88, 81, 70, 15,  3, 73, 88],\n",
       "         [72, 76, 74, 75, 87, 86,  3, 76, 81,  3],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3,  3, 29, 83],\n",
       "         [90, 86,  3, 68, 85, 72,  3, 76, 81,  3],\n",
       "         [89, 72, 85, 86, 72,  3, 73, 88, 81, 70],\n",
       "         [ 3, 57, 68, 79, 88, 72, 40, 85, 85, 82],\n",
       "         [73, 17, 83, 68, 85, 87, 76, 87, 76, 82],\n",
       "         [76, 82, 81, 17,  2,  2,  3,  3,  3,  3],\n",
       "         [29,  2,  3,  3,  3,  3,  3,  3,  3,  3],\n",
       "         [ 3, 32,  3, 75, 72, 68, 83, 62, 83, 82],\n",
       "         [71,  2,  3,  3,  3,  3, 70, 79, 72, 68],\n",
       "         [71, 76, 85, 72, 70, 87, 82, 85, 92, 15],\n",
       "         [81, 82, 87,  3, 74, 72, 87,  3, 69, 68],\n",
       "         [68, 79, 76, 68, 86, 72, 86,  3, 82, 73],\n",
       "         [76, 82, 81, 17, 66, 68, 70, 87, 76, 89],\n",
       "         [72,  3, 76, 73,  3, 83, 85, 82, 89, 76],\n",
       "         [87, 72, 85, 80, 76, 81, 72,  3, 87, 75],\n",
       "         [71, 82, 82, 83, 17, 76, 82, 17, 47, 82],\n",
       "         [ 3, 62, 19, 15,  3, 20, 64, 17,  2,  3],\n",
       "         [83, 72, 85, 11, 86, 87, 85, 72, 68, 80],\n",
       "         [53, 39, 39,  3, 82, 73,  3, 47, 68, 69],\n",
       "         [76, 79, 79,  3, 69, 72,  3, 71, 72, 87],\n",
       "         [ 3, 55, 85, 88, 72, 12,  2,  3,  3,  3],\n",
       "         [86,  3, 76, 86,  3, 88, 86, 72, 71,  3],\n",
       "         [ 3, 82, 73,  3, 73, 76, 72, 79, 71, 86],\n",
       "         [16, 16, 16, 16, 16, 16, 16, 16, 16, 16],\n",
       "         [32, 51, 44, 51, 40, 15,  3, 86, 87, 71],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3, 86, 72, 79],\n",
       "         [85, 70, 72, 15,  3, 86, 70, 68, 79, 68],\n",
       "         [72, 79, 72, 80, 72, 81, 87, 86,  2,  3],\n",
       "         [ 3, 49, 82, 81, 72, 29,  2,  3,  3,  3],\n",
       "         [79,  3, 87, 82,  3, 80, 76, 81, 11, 86],\n",
       "         [15,  3, 11, 79, 76, 86, 87, 15,  3, 87],\n",
       "         [72, 15,  3, 76, 86, 66, 71, 68, 87, 72],\n",
       "         [ 3,  3, 95,  3, 68, 74, 72, 95, 75, 72],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3,  3,  3,  3],\n",
       "         [ 3,  3,  3,  3, 86,  3, 32,  3, 86, 62],\n",
       "         [90, 86, 54, 72, 70, 85, 72, 87, 46, 72],\n",
       "         [80,  5, 12, 29,  2,  3,  3,  3,  3,  3],\n",
       "         [81, 86, 87, 68, 81, 70, 72, 11, 91, 15],\n",
       "         [ 3,  3,  3,  5,  5,  5,  2,  2,  3,  3],\n",
       "         [17,  3, 46, 72, 92,  3, 68, 81, 71,  3],\n",
       "         [ 2,  2,  3,  3,  3,  3,  3,  3,  3,  3],\n",
       "         [81, 92,  3, 70, 75, 68, 85, 68, 70, 87],\n",
       "         [ 3,  3,  3,  3,  3,  5,  5,  5,  2,  3],\n",
       "         [72, 29,  3, 83, 76, 70, 78,  3, 82, 81],\n",
       "         [84, 88, 72, 81, 87,  3, 76, 87, 72, 80],\n",
       "         [68, 85, 87, 76, 87, 76, 82, 81, 86, 32],\n",
       "         [ 5, 12,  2,  3,  3,  3,  3,  3,  3,  3],\n",
       "         [ 3,  3, 85, 68, 76, 86, 72,  3, 57, 68],\n",
       "         [17, 74, 17,  3, 62, 20, 15, 20, 19, 15],\n",
       "         [87,  3, 70, 82, 83, 92,  3, 87, 75, 72],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3,  3,  3, 73],\n",
       "         [ 2,  3,  3,  3,  3,  3,  3,  3,  3,  3],\n",
       "         [72, 29,  2,  3,  3,  3,  3,  3,  3,  3],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3, 72, 91, 76],\n",
       "         [ 3,  3,  3,  3, 76, 73,  3, 72, 91, 87],\n",
       "         [49, 82, 81, 72, 15,  3, 72, 86, 70, 68],\n",
       "         [ 3,  3,  3, 83, 68, 76, 85, 86,  3, 82],\n",
       "         [29, 83, 68, 85, 68, 80,  3, 81, 72, 74],\n",
       "         [82, 81, 11, 12, 15,  2,  3,  3,  3,  3],\n",
       "         [ 2,  3,  3,  3,  3,  3,  3,  3,  3, 29],\n",
       "         [11, 86, 72, 79, 73, 17, 81, 88, 80, 53],\n",
       "         [ 3, 57, 68, 79, 88, 72, 40, 85, 85, 82],\n",
       "         [17, 68, 79, 76, 68, 86, 11,  5, 70, 82],\n",
       "         [ 3,  3,  3, 49, 82, 81, 72, 95,  3,  3],\n",
       "         [ 3,  3,  3, 71, 72, 73,  3, 68, 79, 79],\n",
       "         [ 3, 76, 86,  3, 81, 82, 87,  3, 70, 68],\n",
       "         [74, 71, 15,  3, 86, 72, 79, 73, 17, 66],\n",
       "         [ 2,  3,  3,  3,  3, 19,  2,  3,  3,  3],\n",
       "         [76, 70, 87, 11, 68, 85, 85, 68, 92, 11],\n",
       "         [83, 72,  3, 11, 33,  3, 19, 12,  3, 82],\n",
       "         [17,  3, 39, 88, 72,  3, 87, 82,  2,  3],\n",
       "         [46, 16, 25, 20, 23, 25, 64, 62, 54, 51],\n",
       "         [86, 78, 86,  3, 68, 85, 72,  3, 68, 70],\n",
       "         [81, 74,  3, 39, 68, 87, 68, 41, 85, 68],\n",
       "         [74, 88, 79, 68, 85,  3, 89, 68, 79, 88],\n",
       "         [71, 72, 70, 82, 80, 83, 82, 86, 76, 87],\n",
       "         [ 3, 68,  3, 51, 92, 87, 75, 82, 81,  3],\n",
       "         [ 3, 32,  3, 72, 91, 83, 85, 62, 19, 64],\n",
       "         [ 3,  3,  3,  3,  3,  3,  3,  3,  3,  3],\n",
       "         [ 3,  3,  3,  3, 76, 73,  3, 89, 17, 81],\n",
       "         [68, 81, 70, 72, 11, 82, 87, 75, 72, 85],\n",
       "         [ 2,  3,  3,  3,  3, 88, 86, 76, 81, 74],\n",
       "         [92, 46, 72, 92, 11, 79, 68, 80, 69, 71],\n",
       "         [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0]]),\n",
       " 'labels': tensor([71, 73,  3, 86,  3,  3, 80, 85, 82,  3, 79, 38,  3, 68, 15, 72,  3, 90,\n",
       "         89,  3, 73, 76, 29,  3, 71, 71, 81, 68, 76, 72, 87, 71,  3, 83, 53, 76,\n",
       "          3, 86,  3, 16, 32,  3, 85, 72,  3, 79, 15, 72,  3,  3,  3, 90, 80, 81,\n",
       "          3, 17,  2, 81,  3, 72, 84, 68,  5,  3, 17, 87,  3,  2, 72,  3,  3, 49,\n",
       "          3, 29, 82,  2, 11,  3, 17,  3,  3,  3, 74,  2, 76, 83, 17, 46, 86, 81,\n",
       "         74, 71,  3,  3,  3,  3, 68,  2, 92,  0])}"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "next(iter(train_loader))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "class CharMLP(nn.Module):\n",
    "    def __init__(self,vs):\n",
    "        # vs表示字典的大小,字典长度可以随意选取\n",
    "        super().__init__()\n",
    "        self.emb = nn.Embedding(vs,30)  #30表示文字的特征\n",
    "        self.hidden1 = nn.Linear(10 * 30 , 128)\n",
    "        self.hidden2 = nn.Linear(128,32)\n",
    "        self.lm = nn.Linear(32,vs)\n",
    "        pass\n",
    "    def forward(self,x):\n",
    "        # x (B,10)\n",
    "        B = x.shape[0]\n",
    "        # 文本嵌入\n",
    "        emb = self.emb(x)   #(B,10,30)\n",
    "        h = emb.view(B, -1) #(B, 300)\n",
    "        h = F.relu(self.hidden1(h))\n",
    "        h = F.relu(self.hidden2(h))\n",
    "        out = self.lm(h)\n",
    "        return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CharMLP(\n",
       "  (emb): Embedding(99, 30)\n",
       "  (hidden1): Linear(in_features=300, out_features=128, bias=True)\n",
       "  (hidden2): Linear(in_features=128, out_features=32, bias=True)\n",
       "  (lm): Linear(in_features=32, out_features=99, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = CharMLP(len(tokenizer.char2ind))    #字典长度是99\n",
    "model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "评估模型的代码 + 训练模型的代码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "def estimate_loss(model):\n",
    "    re = {}\n",
    "    # 将模型切换到评估模式\n",
    "    model.eval()\n",
    "    re['train'] = _loss(model,train_loader)\n",
    "    re['test'] = _loss(model,test_loader)\n",
    "    # 将模型切换到训练模式\n",
    "    model.train()\n",
    "    return re\n",
    "\n",
    "@torch.no_grad\n",
    "def _loss(model,dataloader):\n",
    "    # 估算模型损失\n",
    "    loss =[]\n",
    "    data_iter= iter(dataloader)\n",
    "    #随机使用多个批量数据来预估模型效果\n",
    "    for k in range(eval_iters):\n",
    "        data = next(data_iter,None)\n",
    "        if data is None:\n",
    "            data_iter = iter(dataloader)\n",
    "            data = next(data_iter,None)\n",
    "        inputs,labels= data['inputs'],data['labels']\n",
    "        logits = model(inputs)\n",
    "        loss.append(F.cross_entropy(logits,labels).item())\n",
    "    return torch.tensor(loss).mean().item()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_model(model,optimizer,epochs = 10):\n",
    "    #记录模型在训练集上的模型损失\n",
    "    lossi = []\n",
    "    for epoch in range(epochs):\n",
    "        for i,data in enumerate(train_loader,0):\n",
    "            inputs,labels = data['inputs'],data['labels']\n",
    "            optimizer.zero_grad()\n",
    "            logits = model(inputs)\n",
    "            loss = F.cross_entropy(logits,labels)\n",
    "            lossi.append(loss.item())\n",
    "            loss.backward()\n",
    "            optimizer.step()\n",
    "        #评估模型，并输出结果\n",
    "        stats = estimate_loss(model)\n",
    "        train_loss = f'train loss {stats[\"train\"]:.4f}'\n",
    "        test_loss = f'test loss {stats[\"test\"]:.4f}'\n",
    "        print(f'epoch:{epoch},训练损失:{train_loss},测试损失:{test_loss}')\n",
    "    return lossi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'train': 0.0, 'test': 0.7751826047897339}"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "estimate_loss(model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "生成文本的函数，目的是查看训练后的模型是否能产生有效的样本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [],
   "source": [
    "@torch.no_grad()\n",
    "def generate(model,context,tokenizer,max_tokens = 300):\n",
    "    out = []\n",
    "    model.eval() #打开推理模式\n",
    "    for _ in range(max_tokens):\n",
    "        logits = model(context)             # (1,99)\n",
    "        probs = F.softmax(logits,dim = -1)  # (1,99)\n",
    "        # 随机抽样\n",
    "        id = torch.multinomial(probs,num_samples = 1)\n",
    "        # 更新背景\n",
    "        context = torch.concat((context[:,1:],id),dim= -1)\n",
    "        out.append(id.item())\n",
    "        if out[-1] == tokenizer.end_ind:\n",
    "            break\n",
    "    model.train()\n",
    "    return out\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n$+\\n%<|b|>\\n &$\\n'"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "context = torch.randint(0,10,(1,10),device = 'cpu')\n",
    "''.join(tokenizer.decode(generate(model,context,tokenizer)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch:0,训练损失:train loss 0.0000,测试损失:test loss 0.0000\n",
      "epoch:1,训练损失:train loss 0.0000,测试损失:test loss 0.0000\n",
      "epoch:2,训练损失:train loss 0.0000,测试损失:test loss 0.0000\n",
      "epoch:3,训练损失:train loss 0.0000,测试损失:test loss 0.0000\n"
     ]
    }
   ],
   "source": [
    "import torch.optim\n",
    "l = train_model(model,optim.Adam(model.parameters(),lr = lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.plot(torch.tensor(l).view(-1,10).mean(dim = -1))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
